JSONP回调方法未定义。

5

我正在尝试使用jquery在greasemonkey脚本中获取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 未定义
我做错了什么?
注意:我正在从 craigslist 页面的 greasemonkey 脚本中进行此调用。这是一个跨域请求,但我可以看到请求实际上已经到达服务器并返回了一个良好的响应,但由于某种原因,jquery 创建的注册回调在响应返回时似乎不存在。如果我从 craigslist 页面的 firebug 控制台运行脚本,则可以正常工作,但是从 greasemonkey 脚本运行时则不行。

你是将jQuery嵌入到GreaseMonkey脚本中还是单独加载它? - James
或者,您正在增强的页面上已经有jQuery可用吗? - James
我已经通过Greasemonkey脚本将其加载进来了。 - Micah
1
您可以使用 JSONP 解决此问题。请点击下面的链接。该网站还包含演示代码。http://www.onlinesolutionsdevelopment.com/blog/web-development/javascript/jsonp-example/ 希望这能解决您的问题。 - user1021341
3个回答

3

您是否已经尝试:

$.ajax({
    url: "http://mydomain.com/MyWebService",
    data: { authkey: "temphash" },
    type: "get",
    dataType: "jsonp",
    cache: false,
    success: function(data) {
        console.log(data);
    }
});

来自文档:

"jsonp": 使用JSONP加载JSON块。 将在您的URL末尾添加额外的"?callback=?"以指定回调函数。

我没有检查过jQuery的源代码,但如果您在dataType选项中指定了jsonp,则可能不会创建回调函数。


2
原文如下:

事实证明,在greasemonkey脚本中使它工作需要额外的操作(故意用了个猴子的比喻)。

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

简短的答案是放弃JSONP方法,将以下内容包含在您的脚本中:

// @require http://courses.ischool.berkeley.edu/i290-4/f09/resources/gm_jq_xhr.js

虽然我不确定我是否完全理解了它,但是无论如何它像一位冠军一样工作,我能够从我的脚本中进行跨域请求。


1
如果您对 gm_jq_xhr.js 脚本的工作原理感兴趣,可以阅读我写的解释 - Ryan

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接