使用jsonp和jquery跨域
我正在执行从使用jsonp和jquery跨域,jquery,ajax,cross-domain,internet-explorer-10,Jquery,Ajax,Cross Domain,Internet Explorer 10,我正在执行从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",
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的请求。响应体
还包含我从服务器发送的字符串。该字符串是:“好的”
奇怪的是,错误处理程序总是被触发,我无法访问数据。
我也通过服务器发送Access Control Allow Headers
和Access Control Allow Origin
头(我遇到一些帖子要求这样做)
我还收到一个脚本错误,说“OK”未定义OKAY'是我从服务器得到的回复字符串。这是怎么发生的?我如何才能使这个跨域请求成功
我正在使用jquery1.10.2&ie10
正如您所看到的,我也在使用jsonp&jquery文档中定义的正确参数来执行跨域请求
标记target.js
的请求target.js的PHP服务器端主体是clientFunction(“$\u GET['arg]”)
clientFunction(“foo”)
clientFunction
运行,参数为“foo”
ok
”将被视为脚本,但ok
未在客户端脚本环境中声明为有效标识符,因此会导致错误。(在我上面的示例中,我们假设在交换发生之前,clientFunction
已在客户端声明。)
如果您可以控制服务器,并且可以提供CORS头,比如
accesscontrolalloworigin
,那么您就不需要JSONP。只需发出一个普通的Ajax请求。您应该尝试使用Ajax跨源jQuery插件
您将能够无限制地跨域使用ajax 您是说响应类型为
jsonp
,但您的响应是字符串ok
,这是无效的,jsonp
响应的格式应为somethod(data)
。由于您的服务器正在发送Access Control Allow Origin
头。。。将数据类型更改为text
,然后尝试响应正文还包含我从服务器发送的字符串。该字符串是:“好的”“好的”
不是有效的jsonp。jsonp请求不需要跨域头。@ArunPJohny:将类型设置为text仍然会引发错误Handle在这里写了一个与此问题相关的答案:–最后一个,支持HttpSJ必须记住,如果您想支持IENamely,请使用插件添加IE8+支持:它不允许我执行普通ajax请求。。它仍然会触发错误句柄,我现在做的是在服务器上格式化字符串,如下所示:jsonpres='OKAY';在客户端,在错误句柄中,我可以执行console.log(jsonpres);但这根本不是一个好的解决方案。。
$.ajax({
crossOrigin: true,
url: url,
success: function(data) {
console.log(data);
}
});