标签: xmlhttprequest

PC从睡眠模式唤醒时开始调用js函数

在我的 aspx 页面中,我xmlhttp.response用来更新此页面的一部分。此更新使用 js 函数每 3 秒发生一次。但是当我的电脑进入睡眠模式时,这个更新不会发生。还行吧。但是当 PC 从睡眠模式唤醒时,我需要自动开始更新而不重新加载此页面。这该怎么做?

html javascript xmlhttprequest dom-events

1
推荐指数
1
解决办法
2821
查看次数

如何在Chrome App中执行同步XMLHttpRequest?

使用以下代码:

var xhr = new XMLHttpRequest();
xhr.open('GET', url, false);
Run Code Online (Sandbox Code Playgroud)

产生以下错误:

未捕获的InvalidAccessError:无法在'XMLHttpRequest'上执行'open':对此页面禁用同步请求.

这根本不可能,还是我做错了?我需要额外的权限吗?

javascript xmlhttprequest google-chrome-app

1
推荐指数
1
解决办法
2921
查看次数

使用javascript进行Ajax/XMLHttpRequest跟踪

我知道firebug可以跟踪页面上的所有Ajax/XHR事件.但是我需要准备一个工具,在已经存在的网页上按钮点击时自动跟踪这些调用.

我的网页的HTML和JS结构如下:

HTML:

<a href="javascript:void(0)" id="callButton" class=" call-btn " style="width: 30px;">Call</a>
Run Code Online (Sandbox Code Playgroud)

JS:

scope: this,
id: 'callButton',
handler: function () {
    Ext.Ajax.request({
        url: '/Ajax/getCall/callUser/',
        params: {
            userID: usr.id
        },
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议如何在另一个JavaScript或其他东西的帮助下跟踪这个ajax调用?基本上我需要获得按钮单击时调用的内容,在此示例中:"/ Ajax/getCall/callUser /".它也适用于我页面上的所有按钮.

html javascript ajax trace xmlhttprequest

1
推荐指数
1
解决办法
1351
查看次数

从外部应用程序调用绑定脚本 - Google电子表格

我想将Chrome扩展程序与Google电子表格集成.

简单来说:我希望我的Chrome扩展程序能够打开电子表格并调用电子表格中包含的其中一个脚本.特别是JSON数据(参见最后的更新).

  • 我处理扩展的知识很好.
  • 另外,我在电子表格中创建绑定脚本的知识.
  • 但是,我对谷歌网络应用程序,doGets和类似的东西的知识非常困惑,他们的文档从我应该知道他们在谈论什么的点开始,但我没有.所以我需要有关事情如何流动的细节.在不知道代码应该是什么以及在哪里的情况下谈论身份验证和内容似乎并没有带来任何影响.

所以我需要一个详细的答案.而其中的部分是绝对必要的.

到目前为止,我有一个非常好的脚本运行(脚本不是这个问题的范围),绑定到电子表格.(该脚本应仅针对此工作表运行,因此除非出于技术原因,否则保持绑定不是问题).

工作表需要获取一些外部数据(我无法控制)来运行带有该数据的脚本.如果我使用电子表格进行尝试UrlFetch,我会遇到跨域问题而谷歌阻止我(如果你可以帮助我绕过这个跨域问题,它也会很棒).

在Chrome扩展程序中,附加到检索数据的页面,我可以执行所需的所有请求并实际获取数据,但之后,我不知道如何将此数据发送到工作表.

所以,我希望扩展和工作表能够相互通信.它不需要是双向谈话.如果只是扩展程序可以在工作表中输入数据而没有得到答案,则它可以工作.

这可以实现吗?

还有另一种方法吗?


更新:

在@Peter Herrmann的帮助下,我能够摆脱零.doGetdoPost设置(如此问题的结尾所示),现在我正在努力将"JSON"数据发送到工作表.我在单独的表中创建了"JSON"和"JSONP"版本以进行测试.

如果我exec在浏览器的导航栏中输入链接,它工作正常(但我相信这只是一个"GET",是吗?我可以通过导航栏发送JSON吗?).

如果我使用浏览器的控制台发送XMLHttpRequest它会带来以下错误,无论是脚本的"JSON"还是"JSONP"版本:

  • Chrome控制台:"XMLHttpRequest无法加载https://script.google.com/macros/s/xxxx/exec.对预检请求的响应未通过访问控制检查:否存在'Access-Control-Allow-Origin'标头因此,请求资源.原因https://xxxxxxxxx.com不允许访问.响应的HTTP状态代码为405."
  • Mozilla的控制台---"405方法不允许".

用于请求的代码是:

var req = new XMLHttpRequest();     
req.open("POST", "https://script.google.com/macros/.../exec", true);
req.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
req.send(JSON.stringify({d1:"hey", d2:"there"}));
Run Code Online (Sandbox Code Playgroud)

但是,在像这样的脚本标记中使用标准的"JSONP"请求是有效的(但是这不会将JSON发送到工作表,是吗?):

 $("<script src='https://script.google.com/macros/s/AKfycbza11ABUxtxn-rcv-1v2ZM3uCzpARx1-t6KkPJk4rtAta_4SQc/exec?prefix=window.alert'></script>").appendTo($(document.head)).remove();
Run Code Online (Sandbox Code Playgroud)

如果我尝试将请求代码放在脚本标记内,它也会导致"不允许"错误.

在表格代码中,相关部分是:

function doGet(request) {

   var result = JSON.stringify({data: 'Thanks, I received the request'});

   //JSON
   return …
Run Code Online (Sandbox Code Playgroud)

xmlhttprequest google-sheets urlfetch google-chrome-extension google-apps-script

1
推荐指数
1
解决办法
1285
查看次数

CORS请求做出反应

尝试使用simple-twitter从Twitter API获取内容时出现此错误:

XMLHttpRequest cannot load https://api.twitter.com/1.1/statuses/user_timeline.json. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access. The response had HTTP status code 400
Run Code Online (Sandbox Code Playgroud)

我基本上完成了它在反应文档中所说的内容,但更换了相关的行:

  componentDidMount: function() {
    twitter.get('statuses/user_timeline', function(error, data) {
      if(this.isMounted()){
        this.setState({tweets: data})
        console.dir('callback')
      }
    }.bind(this));
  }
Run Code Online (Sandbox Code Playgroud)

回调函数似乎永远不会触发,我认为这是由于请求未完成.

我在这里错过了什么?

javascript ajax xmlhttprequest reactjs

1
推荐指数
1
解决办法
1万
查看次数

如何使用getAllResponseHeaders方法创建JSON对象

我目前正在撰写Google Chrome扩展程序,我需要找到有关网站响应标头的信息.为了做到这一点,我使用了该getAllResponseHeaders方法,但我需要将它放在JSON对象中.不幸的是,我一直收到错误消息SyntaxError: Unexpected token D in JSON at position 0 at main.

这是我到目前为止用来执行此操作的代码:

xmlhttp.open("GET", url, false);
xmlhttp.onreadystatechange=function() {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        allResponseHeaders = xmlhttp.getAllResponseHeaders();
    }
};
xmlhttp.send();

var responseHeaders = JSON.parse(allResponseHeaders);
obj.headers = responseHeaders;
Run Code Online (Sandbox Code Playgroud)

当我在allResponseHeaders = xmlhttp.getAllResponseHeaders();通话结束后立即发出警报时,警报显示通话成功; 所有响应标头都已被检索.第一个响应头是Date,我认为这与Unexpected token D我的错误消息部分有关,但我不知道它为什么不能正确解析.我该如何解决?提前致谢.

编辑:我希望我的JSON对象看起来像这样:

{
  "headers": {
    "Date": "June 20, 2016",
    "Content-Type": "charset=UTF/8",
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

javascript json google-chrome xmlhttprequest google-chrome-extension

1
推荐指数
2
解决办法
1252
查看次数

仅当文件上传完成时才触发XMLHttpRequest事件onProgress

我有以下AJAX代码,脚本将文件正确上传到服务器(节点表示)。我面临的问题是,仅在下载总字节时(因此在文件上传结束时)才触发onProgress,而不是在进度期间才触发。

目前,我无法在客户端中显示一些用于文件上传进度的UI。

我想知道此问题与AJAX调用有关还是与服务器有关。

           var formData = new FormData();
            var xhr = new XMLHttpRequest();

            var onProgress = function (e) {
                if (e.lengthComputable) {
                    var percentComplete = (e.loaded / e.total) * 100;
                    console.log(percentComplete);
                }
            };

            var onLoad = function (event) {
                var reponse = JSON.parse(xhr.responseText);
                this._logicAddWdg(reponse);
            }.bind(this);

            var onError = function (err) {
                console.log(onError);
            };

            formData.append('file', this._uploaderFile);
            xhr.addEventListener('error', onError, false);
            xhr.addEventListener('progress', onProgress, false);
            xhr.addEventListener('load', onLoad, false);
            xhr.open('post', '/uploads', true);
            xhr.send(formData);
Run Code Online (Sandbox Code Playgroud)

服务器头响应:

Accept-Ranges:bytes
Cache-Control:public, max-age=0
Connection:keep-alive
Content-Length:5510872
Content-Range:bytes 0-5510871/5510872
Content-Type:video/mp4
Date:Tue, 11 Apr …
Run Code Online (Sandbox Code Playgroud)

javascript ajax jquery xmlhttprequest node.js

1
推荐指数
1
解决办法
1614
查看次数

d3.json不会在D3 v4中返回我的数据数组

我正在使用d3.json加载包含我的数据的JSON文件,如下所示:

var data = d3.json(url, callback)
Run Code Online (Sandbox Code Playgroud)

如果我做了,console.log(data)我可以看到data它既不是空的也不是null.但是,它似乎不包含我的数据数组,而是包含其他内容.

我在这做错了什么?


注意:这是一个自我回答的问题,试图提供一个主题的"规范"问答,这个问题已经被许多先前的问题所触及,而不是(由API明确解释).以下答案是作为这些问题的一般指导而写的.

javascript json xmlhttprequest d3.js

1
推荐指数
1
解决办法
1731
查看次数

CORS“允许凭证” Nodejs / Express

我的项目在具有Express后端的Node上运行。

我正在尝试使用Arangojs查询我的Arango数据库客户端。ArangoDB在Digital Ocean上的Docker上运行。查询数据库服务器端没有问题,但是页面加载时出现以下错误:

无法加载 http://0.0.0.0:8529/_db/database/_api/cursor:对预检请求的响应未通过访问控制检查:响应中“ Access-Control-Allow-Credentials”标头的值为'false',当请求的凭据模式为'include'时必须为'true'。因此,不允许访问源' http:// localhost:3000 '。XMLHttpRequest发起的请求的凭据模式由withCredentials属性控制。

我在客户端js上的代码如下所示:

var db = new arangojs.Database({url:'http://0.0.0.0:8529'})
db.useDatabase(dbase)
db.useBasicAuth("database", 'password')
db.query('FOR doc IN docs RETURN doc') // etc. etc.
Run Code Online (Sandbox Code Playgroud)

编辑: 1年后事后看来,这个问题很傻-正确的答案是不要通过客户端JS公开您的数据库凭据...与您的后端进行通信,并与您的数据存储区进行通信。

javascript xmlhttprequest node.js cors express

1
推荐指数
2
解决办法
4466
查看次数

浏览器未为显式域保存Cookie

在服务器上,我使用express.js,在浏览器中,我使用fetch API。我使用默认域发送cookie,然后浏览器正确设置它并随后续请求一起发送。但是,当我将域设置为父域时,不会设置cookie。我的理解是应该的

假设我的代码是从“ my.example.com”端口8080提供的。那么我的服务器代码如下所示:

response.cookie("token",token,{
    encode:String,
    domain:".example.com",
    expires: new Date(Date.now()+86400000000),
    secure:false}
)
Run Code Online (Sandbox Code Playgroud)

在客户端上,我的代码如下所示:

fetch("/login", {
    credentials: "include", // also tried "same-origin"
    mode:"cors", // also tried omitting
    headers:new Headers( {
         // authentication data is here
    })
})
Run Code Online (Sandbox Code Playgroud)

起初我以为这是父域,但如果我使用任何域,似乎cookie不会被保存。

因此,以下任何一项都不会保存在客户端上:

    domain:".example.com",

    domain:".example.com:8080",

    domain:"my.example.com",

    domain:"my.example.com:8080",
Run Code Online (Sandbox Code Playgroud)

但是,如果我省略“域”,那么它被保存。

而且要明确一点,当我在Chrome开发人员工具中查看回复时,我看到收到了Cookie-出于某种原因它没有被保存。

我需要能够为任何其他子域中的任何子域设置此Cookie。根据我的阅读,a.example.com应该没有问题,将cookie设置为.example.com,以便b.example.com可以使用它。

更新:我也尝试使用XMLHttpRequest,并获得相同的行为!

更新2:我也不能直接从具有父域的javascript设置cookie,例如,这可行:

document.cookie=("token=<...>; Domain=my.example.com; Path=/")
Run Code Online (Sandbox Code Playgroud)

但这不是

document.cookie=("token=<...>; Domain=.example.com; Path=/")
Run Code Online (Sandbox Code Playgroud)

从我已阅读的所有内容来看,此行应该有效,但对我而言不起作用。我认为这里应该没有问题是正确的吗?如果是这样,我该如何解决为什么无法设置Cookie的问题?我已经尝试过的事情:

  1. my.example.com指向127.0.0.1。使其指向另一个非本地主机地址,没有解决该问题。

  2. my.example.com实际上不是.com地址,也不是其他5个硬编码地址之一,不允许仅使用一个点。使其指向.com地址,但未解决问题。

  3. 也许从控制台设置cookie以进行测试不起作用。我直接从服务器加载的javascript代码中尝试了所有更改,但没有解决问题。

  4. 标题的顺序可能很重要。将路径移到域之前

  5. 也许情况很重要。将“路径”和“域”更改为全部小写。没有解决问题。

  6. 也许“路径”不需要存在。删除它并不能解决问题。

  7. 从Cookie的元素之间删除了空格。没有效果。

  8. 也许是一个奇怪的字符使需要编码的东西变得混乱。已检查并且令牌中仅包含字母数字键。Cookie的总长度仅为大约100个字节,远低于最大长度,因为只有一个Cookie。

  9. 也许我的域名有些奇怪,浏览器不喜欢上面没有提到的东西。所以我去了www.example.com,打开控制台并输入:

    document.cookie =“ token = 1; domain …

cookies xmlhttprequest session-cookies express fetch-api

1
推荐指数
1
解决办法
741
查看次数