我使用此代码通过http://openkeyval.org/
$.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控制台中的一切都很好,但在userscript中,我收到了这样的错误
未捕获引用错误: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访问它一样
{"error":"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多个小时
非常感谢。
看起来$.ajax
总是触发错误事件函数
但是GM_xmlhttpRequest
可以检索错误类型的数据,
所以我尝试在GM_xmlhttpRequest
中查找dataType: "jsonp"
,我得到jsonp头内容类型是"application/javascript"
或"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);
}
});
并使用CCD_ 11检索数据,即使它总是触发错误事件功能,但它仍然发送数据
我在GM_xmlhttpRequest
上尝试了两种内容类型,但仍然无法工作。
我存储数据的代码看起来像这个
$.ajax({ /* send data */
url: "http://api.openkeyval.org/store/",
data: "test-key-data=" + JSON.stringify(myVarObject),
dataType: "jsonp"
});
将其添加到$.ajax({…})中
crossDomain: true;
这是因为默认情况下跨域功能被禁用。看见http://api.jquery.com/jQuery.ajax/
编辑:
有时,本地脚本和远程脚本之间的字符集不同会出现问题。尝试使用:
scriptCharset: "utf-8";
另外,看看JQuery AJAX并没有向我的服务器发送UTF-8,只是在IE 中
详细阐述我的评论
引用是指jquery生成的回调函数。在我看来,调用用户脚本的方式是在执行回调之前卸载jquery函数。也许你使用了一个链接,却忘记了preventDefault?
如果你有ajax和
$("#linkid").on("click"
或
$("#formid").on("submit"
必须继续这样做:
,function(e) {
e.preventDefault();
否则,链接被跟踪或表单被提交,这可能没有任何可见的效果,但异步脚本已经(部分)卸载,除非表单和链接的目标不是当前窗口