[英]cross domain with jsonp and jquery
我正在执行从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-Headers
和Access-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技巧:
客户端制作一个<script src="target.js?arg=foo">
标记
服务器获取对target.js
的请求。
target.js
的PHP服务器端主体是clientFunction("$_GET['arg']")
客户端获取脚本: clientFunction("foo")
客户端使用参数"foo"
执行脚本,该脚本使客户端功能clientFunction
运行。
这里显而易见的是:JSONP响应是脚本 。 如果您的客户要求JSONP响应,则它要求一个script 。 因此,内容“ okay
”被视为脚本,但是在您的客户端脚本环境中okay
尚未被声明为有效的标识符,因此会导致错误。 (在上面的示例中,我们假设在进行交换之前clientFunction
声明为客户端。)
如果您可以控制服务器,并且可以提供CORS标头(如Access-Control-Allow-Origin
,则不需要JSONP。 只需发出普通的Ajax请求即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.