我正试图在一个greasemonkey脚本中使用jquery来获取jsonp回调。这是我的jquery:
$.ajax({
url: "http://mydomain.com/MyWebService?callback=?",
data: { authkey: "temphash" },
type: "get",
dataType: "json",
cache: false,
success: function(data) {
console.log(data);
}
});
在我的webservice(asp.net)中我将返回内容类型为application/javascript
的响应。服务器实际发回的响应是:
jsonp1276109314602({"message":"I'm getting tired of this not working"})
jsonp1276109314602
方法名称由jquery随机生成,我用Request.QueryString["callback"]
但是我的成功函数从未被调用过,而firebug控制台给我一个错误jsonp1276109314602 is not defined
。
我做错了什么?
注意 我正在craigslist页面上的greasemonkey脚本中进行此调用。这是一个跨域请求,但我可以看到请求实际上是在服务器上并返回一个好的响应,但无论出于何种原因,当响应返回时,jquery创建的注册回调似乎不存在。如果我从craigslist页面在firebug控制台中运行脚本,它可以正常工作,但是当它从greasemonkey脚本运行时却没有。
答案 0 :(得分:3)
你有没有尝试过:
$.ajax({
url: "http://mydomain.com/MyWebService",
data: { authkey: "temphash" },
type: "get",
dataType: "jsonp",
cache: false,
success: function(data) {
console.log(data);
}
});
来自docs:
“jsonp”:使用JSONP加载JSON块。会添加一个额外的“?callback =?”到URL的末尾以指定回调。
我没有检查过jQuery的源代码,但除非你为dataType选项指定了jsonp,否则不可能创建回调函数。
答案 1 :(得分:2)
事实证明,你必须做一些额外的工作(双关语)才能让它在一个关键字脚本中运行。
可以在此处找到长答案:jQuery.getJSON inside a greasemonkey user script。
简短的回答是放弃JSONP方法并将其包含在您的脚本中:
// @require http://courses.ischool.berkeley.edu/i290-4/f09/resources/gm_jq_xhr.js
我不确定我是否理解这一切,但它仍然像冠军一样,我能够从我的脚本中提出跨域请求。
答案 2 :(得分:1)
我认为你应该使用'jsonpCallbackString'代替'成功'。