跨域 JSON 回调未定义



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

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

我试过: 使用 jsonpCallback: myCallback 设置jsonp: false(如下所示) 删除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"})'

不仅仅是原始 JSON: '{"一些":"数据"}'

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

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

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

最新更新