使用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”

  • 这里最明显的收获是:JSONP响应是脚本。如果您的客户机请求JSONP响应,那么它就是在请求脚本。因此,内容“
    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);
        }
    });