在我的 aspx 页面中,我xmlhttp.response用来更新此页面的一部分。此更新使用 js 函数每 3 秒发生一次。但是当我的电脑进入睡眠模式时,这个更新不会发生。还行吧。但是当 PC 从睡眠模式唤醒时,我需要自动开始更新而不重新加载此页面。这该怎么做?
使用以下代码:
var xhr = new XMLHttpRequest();
xhr.open('GET', url, false);
Run Code Online (Sandbox Code Playgroud)
产生以下错误:
未捕获的InvalidAccessError:无法在'XMLHttpRequest'上执行'open':对此页面禁用同步请求.
这根本不可能,还是我做错了?我需要额外的权限吗?
我知道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 /".它也适用于我页面上的所有按钮.
我想将Chrome扩展程序与Google电子表格集成.
简单来说:我希望我的Chrome扩展程序能够打开电子表格并调用电子表格中包含的其中一个脚本.特别是JSON数据(参见最后的更新).
所以我需要一个详细的答案.而其中的部分是绝对必要的.
到目前为止,我有一个非常好的脚本运行(脚本不是这个问题的范围),绑定到电子表格.(该脚本应仅针对此工作表运行,因此除非出于技术原因,否则保持绑定不是问题).
工作表需要获取一些外部数据(我无法控制)来运行带有该数据的脚本.如果我使用电子表格进行尝试UrlFetch,我会遇到跨域问题而谷歌阻止我(如果你可以帮助我绕过这个跨域问题,它也会很棒).
在Chrome扩展程序中,附加到检索数据的页面,我可以执行所需的所有请求并实际获取数据,但之后,我不知道如何将此数据发送到工作表.
所以,我希望扩展和工作表能够相互通信.它不需要是双向谈话.如果只是扩展程序可以在工作表中输入数据而没有得到答案,则它可以工作.
这可以实现吗?
还有另一种方法吗?
更新:
在@Peter Herrmann的帮助下,我能够摆脱零.doGet并doPost设置(如此问题的结尾所示),现在我正在努力将"JSON"数据发送到工作表.我在单独的表中创建了"JSON"和"JSONP"版本以进行测试.
如果我exec在浏览器的导航栏中输入链接,它工作正常(但我相信这只是一个"GET",是吗?我可以通过导航栏发送JSON吗?).
如果我使用浏览器的控制台发送XMLHttpRequest它会带来以下错误,无论是脚本的"JSON"还是"JSONP"版本:
用于请求的代码是:
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
尝试使用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)
回调函数似乎永远不会触发,我认为这是由于请求未完成.
我在这里错过了什么?
我目前正在撰写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
我有以下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) 我正在使用d3.json加载包含我的数据的JSON文件,如下所示:
var data = d3.json(url, callback)
Run Code Online (Sandbox Code Playgroud)
如果我做了,console.log(data)我可以看到data它既不是空的也不是null.但是,它似乎不包含我的数据数组,而是包含其他内容.
我在这做错了什么?
注意:这是一个自我回答的问题,试图提供一个主题的"规范"问答,这个问题已经被许多先前的问题所触及,而不是(由API明确解释).以下答案是作为这些问题的一般指导而写的.
我的项目在具有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公开您的数据库凭据...与您的后端进行通信,并与您的数据存储区进行通信。
在服务器上,我使用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的问题?我已经尝试过的事情:
my.example.com指向127.0.0.1。使其指向另一个非本地主机地址,没有解决该问题。
my.example.com实际上不是.com地址,也不是其他5个硬编码地址之一,不允许仅使用一个点。使其指向.com地址,但未解决问题。
也许从控制台设置cookie以进行测试不起作用。我直接从服务器加载的javascript代码中尝试了所有更改,但没有解决问题。
标题的顺序可能很重要。将路径移到域之前
也许情况很重要。将“路径”和“域”更改为全部小写。没有解决问题。
也许“路径”不需要存在。删除它并不能解决问题。
从Cookie的元素之间删除了空格。没有效果。
也许是一个奇怪的字符使需要编码的东西变得混乱。已检查并且令牌中仅包含字母数字键。Cookie的总长度仅为大约100个字节,远低于最大长度,因为只有一个Cookie。
也许我的域名有些奇怪,浏览器不喜欢上面没有提到的东西。所以我去了www.example.com,打开控制台并输入:
document.cookie =“ token = 1; domain …