跨域jsonp回调未定义

时间:2013-11-07 20:46:00

标签: jquery ajax

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

我只是尝试创建一个ajax请求跨域并将结果存储到javascrip变量中。我正在获得有效的javascript,我的回调被解雇了,但我的成功永远不会。

我试过了:  将jsonp: false设为jsonpCallback: myCallback(现在,如下)  重新启动jsonp: falsejsonpCallback: mcCallback并设置网址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');
    }

1 个答案:

答案 0 :(得分:1)

正如笔记所说,你的服务器必须做出响应  'myCallBack函数({ “一些”: “数据”})'

不仅仅是原始的json:  '{ “一些”: “数据”}'

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

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

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