如何在userscript中发送和检索跨域ajax数据
我使用这段代码通过 在Chrome javascript控制台中,一切正常,但在userscript中,我遇到如下错误如何在userscript中发送和检索跨域ajax数据,ajax,jquery,cross-domain,jsonp,userscripts,Ajax,Jquery,Cross Domain,Jsonp,Userscripts,我使用这段代码通过 在Chrome javascript控制台中,一切正常,但在userscript中,我遇到如下错误 未捕获的引用错误:jQuery110208458673823624849_1375932537303为 未定义 我尝试使用GM\u xmlhttpRequest检索这样的数据 GM_xmlhttpRequest({ method: "GET", url: "http://api.openkeyval.org/test-key-data", onload:
未捕获的引用错误:jQuery110208458673823624849_1375932537303为 未定义 我尝试使用GM\u xmlhttpRequest检索这样的数据
GM_xmlhttpRequest({
method: "GET",
url: "http://api.openkeyval.org/test-key-data",
onload: function(response) {
console.log(response.responseText);
}
});
但openkeyval似乎不通过POST/GET方法接受数据,并且日志结果就像您直接从浏览器的url访问它一样
{“错误”:“未找到”,“文档url”:http://openkeyval.org/“}
我包括了jQuery,它可以很好地使用这段代码/@requirehttp://code.jquery.com/jquery-latest.min.js
我尝试这样使用而不更改其他代码/@requirehttp://courses.ischool.berkeley.edu/i290-4/f09/resources/gm_jq_xhr.js
并尝试将openkeyval官方javascript库与以下代码一起使用/@requirehttp://cdn.openkeyval.org/statics/openkeyval.packed.js
并使用如下代码检索数据
var ourCallback = function(value, key) {
console('The value of ' + key ' + is ' + value);
};
window.remoteStorage.getItem('test-key-data', ourCallback);
GM_xmlhttpRequest({
method: "GET",
url: "http://api.openkeyval.org/test-key-data?nocache=" + new Date(),
headers: {
"Content-Type": "application/javascript"
},
onload: function(response) {
console.log(response.responseText);
}
});
$.ajax({ /* send data */
url: "http://api.openkeyval.org/store/",
data: "test-key-data=" + JSON.stringify(myVarObject),
dataType: "jsonp"
});
仍然出现错误错误:意外字符串
请帮忙,我把它搞乱了10个多小时。
非常感谢。将此添加到$.ajax({…})中
这是因为默认情况下禁用了跨域功能。看
编辑:
有时,本地脚本和远程脚本之间会出现字符集不同的问题。尝试使用:
scriptCharset: "utf-8";
另外,请看详细阐述我的评论
该引用是对jquery生成的回调函数的引用。
在我看来,调用userscript的方式是在执行回调之前卸载jquery函数。
也许您使用了一个链接而忘记了默认值
如果你有
$("#linkid").on("click"
或
必须继续这样做:
,function(e) {
e.preventDefault();
否则,将遵循链接或提交表单,这可能不会产生任何可见的效果,但异步脚本已(部分)卸载,除非表单和链接具有当前窗口以外的目标。ajax始终触发错误事件函数
但是GM\u xmlhttpRequest
可以检索错误类型的数据,
因此我尝试在GM\u xmlhttpRequest
中查找数据类型:“jsonp”
,我得到jsonp头内容类型是“application/javascript”
或“application/json”
,第一个工作正常
我检索数据的新代码如下所示
var ourCallback = function(value, key) {
console('The value of ' + key ' + is ' + value);
};
window.remoteStorage.getItem('test-key-data', ourCallback);
GM_xmlhttpRequest({
method: "GET",
url: "http://api.openkeyval.org/test-key-data?nocache=" + new Date(),
headers: {
"Content-Type": "application/javascript"
},
onload: function(response) {
console.log(response.responseText);
}
});
$.ajax({ /* send data */
url: "http://api.openkeyval.org/store/",
data: "test-key-data=" + JSON.stringify(myVarObject),
dataType: "jsonp"
});
并使用$检索数据。ajax
即使它总是触发错误事件函数,但仍然发送数据。
我在GM\u xmlhttpRequest
上尝试了这两种内容类型,但仍然不起作用。
我存储数据的代码如下所示
var ourCallback = function(value, key) {
console('The value of ' + key ' + is ' + value);
};
window.remoteStorage.getItem('test-key-data', ourCallback);
GM_xmlhttpRequest({
method: "GET",
url: "http://api.openkeyval.org/test-key-data?nocache=" + new Date(),
headers: {
"Content-Type": "application/javascript"
},
onload: function(response) {
console.log(response.responseText);
}
});
$.ajax({ /* send data */
url: "http://api.openkeyval.org/store/",
data: "test-key-data=" + JSON.stringify(myVarObject),
dataType: "jsonp"
});
该引用是对jquery生成的回调函数的引用。在我看来,调用userscript的方式是在执行回调之前卸载jquery函数。也许您使用了一个链接而忘记了preventDefault?很抱歉,我不知道preventDefault,也不太了解响应数据和jsonp。请您告诉我一些信息。感谢您的建议,但使用crossDomain:true
或不使用它时没有任何更改。得到相同的错误未捕获的引用错误:JQUERY110208023558973538503_1375936210604未定义
感谢您的建议,为了明确起见,当文档体完全加载并且出现错误时,我调用了带有out bind to元素的ajax,因此它不会触发成功函数,我尝试放置事件/数据。preventDefault()但它没有效果,我尝试了setTimeout
并用jQuery测试create元素,它仍然是活动的,所以我认为它没有卸载,我仍然不知道如何检索这些数据。再次感谢。如果事件未导致页面加载,则无需使用preventDefault。你能给你的问题加上你的约束吗?