Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在userscript中发送和检索跨域ajax数据_Ajax_Jquery_Cross Domain_Jsonp_Userscripts - Fatal编程技术网

如何在userscript中发送和检索跨域ajax数据

如何在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:

我使用这段代码通过

在Chrome javascript控制台中,一切正常,但在userscript中,我遇到如下错误

未捕获的引用错误: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。你能给你的问题加上你的约束吗?