未定义JSONP回调方法

Mic*_*cah 5 asp.net ajax jquery greasemonkey jsonp

我试图在一个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);
    }
});
Run Code Online (Sandbox Code Playgroud)

在我的webservice(asp.net)中,我将返回内容类型为的响应application/javascript.服务器实际发回的响应是:

jsonp1276109314602({"message":"I'm getting tired of this not working"})
Run Code Online (Sandbox Code Playgroud)

jsonp1276109314602方法名称由jQuery的被随机生成的,并且我与它抢夺Request.QueryString["callback"]

但是我的成功函数从未调用过,而firebug控制台给我一个错误说法jsonp1276109314602 is not defined.

我究竟做错了什么?

注意 我正在craigslist页面上的greasemonkey脚本中进行此调用.这是一个跨域请求,但我可以看到请求实际上是在服务器上并返回一个好的响应,但无论出于何种原因,当响应返回时,jquery创建的注册回调似乎不存在.如果我从craigslist页面在firebug控制台中运行脚本,它可以正常工作,但是当它从greasemonkey脚本运行时则不行.

Mic*_*cah 2

事实证明,您必须做一些额外的事情(双关语)才能让它在 GreetMonkey 脚本中工作。

长答案可以在这里找到:jQuery.getJSON inside a greatmonkey user script

简短的答案是放弃 JSONP 方法并将其包含在您的脚本中:

// @require http://courses.ischool.berkeley.edu/i290-4/f09/resources/gm_jq_xhr.js
Run Code Online (Sandbox Code Playgroud)

不确定我是否理解这一切,但它仍然像冠军一样工作,我能够从我的脚本发出跨域请求。