1

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

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

我已经尝试过: 设置jsonp: falsejsonpCallback: myCallback现在如下) Remobingjsonp: falsejsonpCallback: mcCallback设置 urlurl?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');
    }
4

1 回答 1

1

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

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

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

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

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

于 2015-03-18T20:22:15.180 回答