0

site1.com我正在做一个从到的跨域请求site2.com(都由我维护)

这是 site1.com 上的 jquery 代码:

$.ajax({
        type: 'POST',
        url: 'http://site2.com/test/carrousel.cfm',
        cache: false,
        async: true,
        crossDomain: true, 
        dataType: "jsonp",
        success: function (data, status) {
           alert(data);}
        },
        error: function (xhr, textStatus, errorThrown) {
           alert('error');
        }
    });

我可以在调试器中看到状态为 200 的请求。响应正文还包含我从服务器发送的字符串。该字符串是:"okay"

奇怪的是,错误处理程序总是被触发,我无法访问数据。我也通过服务器发送Access-Control-Allow-HeadersAccess-Control-Allow-Origin标头(我遇到了一些要求这样做的帖子)

我还收到一个脚本错误,提示“OKAY”未定义。'OKAY' 是我从服务器收到的回复字符串。怎么会这样?我怎样才能让这个跨域请求成功?

我正在使用 JQUERY 1.10.2 和 IE 10

如您所见,我还使用 jsonp 和 jquery 文档中定义的正确参数来执行跨域请求

4

2 回答 2

1

您应该尝试 Ajax-cross-origin 一个 jQuery 插件。

http://www.ajax-cross-origin.com/

$.ajax({
    crossOrigin: true,
    url: url,
    success: function(data) {
        console.log(data);
    }
});

您将能够不受限制地使用 ajax 跨域!

于 2014-08-03T21:17:50.243 回答
0

这是一个简单的 JSONP excahnge:

  1. 客户打<script src="target.js?arg=foo">标签

  2. 服务器获取请求target.js

  3. PHP 服务器端的主体target.jsclientFunction("$_GET['arg']")

  4. 客户端取回一个脚本:clientFunction("foo")

  5. 客户端使用参数执行脚本,这会导致客户端函数clientFunction运行"foo"

这里明显的要点是:JSONP 响应是脚本。如果您的客户要求 JSONP 响应,则它要求的是 script。因此,内容“ okay”被视为脚本,但okay尚未在您的客户端脚本环境中声明为有效标识符,因此会导致错误。(在我上面的例子中,我们假设clientFunction在交换发生之前已经声明了客户端。)

如果您可以控制服务器并且可以提供 CORS 标头Access-Control-Allow-Origin,那么您就不需要 JSONP。只需发出一个正常的 Ajax 请求。

于 2013-10-15T15:16:37.870 回答