REST AJAX跨域不执行回调

时间:2012-07-04 07:42:17

标签: jquery ajax rest callback cross-domain

使用Jquery ajax函数执行跨域REST调用时遇到了很多麻烦。

这是代码:

 $.ajax({
            url: restUrl,
                type: 'GET',
                crossDomain : true,
                dataType: 'jsonp',
                jsonp: false,
                jsonpCallback: 'jsonpCallbackTest',
                error: function(xhr, status, error) {
                    console.log('not OK '+xhr);
                    console.log('not OK '+status);
                    console.log('not OK '+error);
                },
                success: function(jsonp) {
                    alert("success");
                }
            });

这就是我在Firebug控制台中获得的内容:

不行[object Object] Init.js:872
不行parsererror Init.js:873
不行错误:jsonpCallbackTest未被称为


我究竟做错了什么?

关于Matej

1 个答案:

答案 0 :(得分:4)

  

我做错了什么?

很难从您在问题中提供的代码信息中说出来。可能有很多原因。例如,您尝试调用的远程REST Web服务返回JSON响应而不是JSONP。

此外,您似乎已经定义了jsonpCallbackTest函数,但您正在使用不兼容的匿名成功处理程序。试试这样:

$.ajax({
    url: restUrl,
    type: 'GET',
    jsonpCallback: 'jsonpCallbackTest',
    error: function(xhr, status, error) {
        console.log('not OK '+xhr);
        console.log('not OK '+status);
        console.log('not OK '+error);
    }
});

然后定义jsonpCallbackTest函数:

function jsonpCallbackTest(jsonp) {
    alert("success");
}

您还必须检查远程Web服务的文档,以指定JSONP回调。是否可以将其作为查询字符串参数传递。

通常首选让jQuery将随机回调函数名称传递给Web服务:

$.ajax({
    url: restUrl,
    type: 'GET',
    dataType: 'jsonp',
    success: function(json) {
        alert("success");
    },
    error: function(xhr, status, error) {
        console.log('not OK '+xhr);
        console.log('not OK '+status);
        console.log('not OK '+error);
    }
});