使用$ .ajax和jQuery 1.7.2执行跨域请求

时间:2012-08-03 21:34:53

标签: jquery ajax jsonp

我总是这样做,用jsonp:

$.ajax({
    url         : 'http://domain.local/api/3/authentication/get-token',
    type        : 'POST',
    dataType    : 'jsonp',
    data        : 'username=user&secret=pass',
    success     : function(data) {
        console.log(data);
    }
});

它与旧的jQuery版本(1.3,1.4)完美配合,但似乎不适用于最新版本(从1.5.x开始,它会产生一个奇怪的GET或OPTION请求)

关于如何解决这个问题的想法?

谢谢!

1 个答案:

答案 0 :(得分:0)

使用新版本的jQuery一直在为我工作。我认为问题是你正在使用POST请求,JSONP不允许这样做:

  

你不能使用JSONP进行POST ...它只是不起作用,它创建一个元素来获取数据......这必须是一个GET请求。除了作为代理发布到您自己的域之外,您可以做的事情并不多,但是用户不能直接执行此操作并查看响应。

来自How to use type: "POST" in jsonp ajax call

您的电话应如下所示:

$.ajax({
    url         : 'http://domain.local/api/3/authentication/get-token',
    type        : 'GET',
    dataType    : 'jsonp',
    data        : 'username=user&secret=pass',
    success     : function(data) {
        console.log(data);
    }
});

如果上述方法无效,请尝试查看使用Firebug发送的参数。 jQuery应该发送一个“callback”参数,其值为“jQuery1710013558088336139917_1344030860953”。

另请查看服务器的响应。服务器应返回返回如下所示的数据:

jQuery1710013558088336139917_1344030860953({"data":"goes here"})