繁体   English   中英

jsonp和jquery跨域

[英]cross domain with jsonp and jquery

我正在执行从site1.comsite2.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文档中定义的正确参数来执行跨域请求

您应该尝试使用Ajax跨源jQuery插件。

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

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

您将可以无限制地使用Ajax跨域!

这是一个简单的JSONP技巧:

  1. 客户端制作一个<script src="target.js?arg=foo">标记

  2. 服务器获取对target.js的请求。

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

  4. 客户端获取脚本: clientFunction("foo")

  5. 客户端使用参数"foo"执行脚本,该脚本使客户端功能clientFunction运行。

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

如果您可以控制服务器,并且可以提供CORS标头(如Access-Control-Allow-Origin ,则不需要JSONP。 只需发出普通的Ajax请求即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM