2

我使用此代码通过http://openkeyval.org/存储和检索 ajax 数据

 $.ajax({    /*   send data    */
        url: "http://api.openkeyval.org/store/",
        data: "test-key-data=" + JSON.stringify([123,456]),
        dataType: "jsonp",
        success: function(data){
            console.log(data);
        }
 }); 

$.ajax({     /*   retrieve data     */
        url: "http://api.openkeyval.org/test-key-data",
        dataType: "jsonp",
        success: function(data){
            console.log(data);
        }
 }); 

在 Chrome javascript 控制台中一切正常,但在用户脚本中我收到这样的错误

未捕获的 ReferenceError:未定义 jQuery110208458673823624849_1375932537303

我尝试使用GM_xmlhttpRequest来检索这样的数据

GM_xmlhttpRequest({
    method: "GET",
    url: "http://api.openkeyval.org/test-key-data",
    onload: function(response) {
        console.log(response.responseText);
    }
});

但似乎 openkeyval 不接受通过 POST/GET 方法的数据,并且日志结果就像您直接从浏览器的 url 访问它时一样

{"错误":"not_found","documentation_url":"http://openkeyval.org/"}

我包含了jQuery,并且它在这段代码中运行良好
// @require http://code.jquery.com/jquery-latest.min.js

我尝试使用Greasemonkey/jQuery XHR 桥接器而不像这样更改其他代码
// @require http://courses.ischool.berkeley.edu/i290-4/f09/resources/gm_jq_xhr.js

并尝试使用带有这样代码的openkeyval 官方 javascript 库
// @require http://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);

仍然有错误ERROR: Unexpected string

请帮忙,我搞砸了10多个小时。
太感谢了。

4

3 回答 3

3

它看起来$.ajax总是触发错误事件函数
,但GM_xmlhttpRequest可以检索错误类型的数据,
所以我尝试在其中查找dataType: "jsonp"GM_xmlhttpRequest我得到 jsonp 标头内容类型为"application/javascript"OR "application/json",第一个运行良好。

我用于检索数据的新代码如下所示

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并使用即使它总是触发错误事件函数来检索数据,但它仍然发送数据。
我尝试了两种内容类型GM_xmlhttpRequest,但仍然无法正常工作。

我存储数据的代码如下所示

$.ajax({    /*   send data    */
        url: "http://api.openkeyval.org/store/",
        data: "test-key-data=" + JSON.stringify(myVarObject),
        dataType: "jsonp"
 }); 
于 2013-08-09T01:55:10.527 回答
0

阐述我的评论

参考的是jquery生成的回调函数。在我看来,您调用用户脚本的方式会在执行回调之前卸载 jquery 函数。也许您使用了链接并忘记了 preventDefault?

如果你 ajax 并且有

 $("#linkid").on("click"

或者

 $("#formid").on("submit"

必须像这样继续:

           ,function(e) {
    e.preventDefault();

否则链接或提交的表单可能没有任何可见的效果,但异步脚本已(部分)卸载,除非表单和链接的目标不是当前窗口

于 2013-08-08T04:46:51.893 回答
0

将此添加到 $.ajax({...})

crossDomain: true;

这是因为默认情况下跨域功能被禁用。见http://api.jquery.com/jQuery.ajax/

编辑:

有时本地脚本和远程脚本之间的字符集不同会出现问题。尝试使用:

scriptCharset: "utf-8";

另请查看JQuery AJAX is not sent UTF-8 to my server, only in IE

于 2013-08-08T04:19:12.253 回答