【问题标题】:cross domain jsonp callback is undefined跨域jsonp回调未定义
【发布时间】:2013-11-19 17:05:37
【问题描述】:

我一定在这里遗漏了一些东西,因为这似乎是一个非常简单的问题,但我已经尝试了大多数解决方案,但都没有运气。

我只是想创建一个 ajax 跨域请求并将结果存储到 javascrip 变量中。我得到了有效的 javascript,我的回调被触发了,但我的成功从来没有。

我试过了: 将jsonp: false 设置为jsonpCallback: myCallback(如下所示) 删除 jsonp: falsejsonpCallback: mcCallback 并设置 url url?callback=? 其他一些事情......重点是,我做错了什么,这是非常基本的

对于下面的示例,我确实得到了alert('hello'),但随后我在控制台中得到了parsererror(来自错误函数)

在阅读评论后编辑以添加现在的情况。不过,同样的问题。不调用成功

    $.ajax({
        url: 'http://localhost/faqservice/questions',
        type: 'GET',
        dataType: 'jsonp',
        error: function (x, t, r) { alert(x + t + r); },
        success: function (data) {
            alert('success');
        }
    });

问题最初是如何提出的

    $(document).ready(function () {
        $.ajax({
            type: "GET",
            url: "http://localhost/faqservice/questions",
            dataType: 'jsonp',
            jsonp: false,
            jsonpCallback: myCallback,
            error: function (httpReq, status, exception) {
                console.log(status);
            },
            success: function(data) {
                alert('success');
            }
        });
    });

    myCallback = function (data) {
        alert('hello');
    }

【问题讨论】:

  • 服务器端响应代码是什么样的?您使用什么将响应发送回客户端?
  • 您的服务器响应应该类似于 'myCallback({"some":"data"})'。是这样吗?
  • 响应没有包含在 myCallback 中,没有。只是一个简单的 json 响应
  • @Tom 那很好。这意味着您的服务器只需要更新以支持 JSONP,因为您的客户端代码是正确的。您的服务器应采用 $_GET["callback"] 的值并将您的 json 字符串包装在其中,例如,jQuery3424723891473_90284732(YOURJSONHERE)

标签: jquery ajax


【解决方案1】:

正如注释所说,您的服务器必须响应如下 'myCallback({"some":"data"})'

不仅仅是原始的 json: '{"some":"data"}'

jsonp有点奇怪,是通过插入脚本标签来请求的,因为脚本标签可以跨域传输。您的服务器必须提供 JS 代码,以便在响应到来时执行某些操作。
jQuery 为您完成了大部分浏览器端。当它发送请求时,它会添加一个参数,如 callback=jQuery17209078477467410266_1426708743857

然后它会设置一个具有该名称的函数,该函数会在响应出现时处理它。 您的服务器必须采用此字符串并构造如下代码: jQuery17209078477467410266_1426708743857({"data": "the"});

如果你只是传递 json,它会像一个大表达式一样执行而被遗忘。

【讨论】:

    猜你喜欢
    • 2016-01-06
    • 2011-10-13
    • 2013-01-02
    • 2014-12-20
    • 2014-05-13
    • 2011-03-01
    • 1970-01-01
    • 2015-03-05
    • 2012-05-28
    相关资源
    最近更新 更多