未定义JSONP回调方法

时间:2010-06-09 19:00:29

标签: asp.net jquery ajax 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);
    }
});

在我的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脚本运行时却没有。

3 个答案:

答案 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'代替'成功'。

http://api.jquery.com/jQuery.ajax/