我使用此代码通过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访问它一样this
{ “错误”: “NOT_FOUND”, “documentation_url”: “http://openkeyval.org/”}
我包含 jQuery ,它可以正常使用此代码
// @require http://code.jquery.com/jquery-latest.min.js
我尝试使用Greasemonkey/jQuery XHR bridge而不是像这样更改其他代码
// @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个小时。
非常感谢你。
答案 0 :(得分:3)
看起来$.ajax
始终触发错误事件功能
但GM_xmlhttpRequest
可以检索错误数据,所以我尝试在dataType: "jsonp"
中查找GM_xmlhttpRequest
,我得到的jsonp标头内容类型为"application/javascript"
或{{1第一个很好用。
我检索数据的新代码如下所示
"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
答案 1 :(得分:0)
将其添加到$ .ajax({...})
中crossDomain: true;
这是因为默认禁用跨域功能。见http://api.jquery.com/jQuery.ajax/
有时本地脚本和远程脚本之间会出现不同的charset问题。尝试使用:
scriptCharset: "utf-8";
另请参阅JQuery AJAX is not sending UTF-8 to my server, only in IE
答案 2 :(得分:0)
阐述我的评论
引用是由jquery生成的回调函数。 听起来你调用你的用户脚本的方式在执行回调之前卸载了jquery函数。 也许您使用链接并忘记了preventDefault?
如果你是ajax并且有
$("#linkid").on("click"
或
$("#formid").on("submit"
继续这样做是强制性的:
,function(e) {
e.preventDefault();
否则,将遵循链接或提交表单,这可能没有任何明显的效果,但异步脚本已被(部分)卸载,除非表单和链接具有除当前窗口之外的目标