【问题标题】:JSONP Cross Domain GET request not working across domainsJSONP跨域GET请求不能跨域工作
【发布时间】:2013-02-24 15:43:37
【问题描述】:

好的,所以我尝试使用 jsonp 进行跨域 ajax webservice 调用以返回类别列表以填充下拉列表并得到奇怪的结果。我遵循了尽可能多的示例,并且在我的域上得到了一个 jsonp 请求,但它在其他域上不起作用。

代码如下:

  function parseJSON(item){
    return   JSON.parse(item, function (key, value) {
                    var type;
                    if (value && typeof value === 'object') {
                        type = value.type;
                        if (typeof type === 'string' && typeof window[type] === 'function') {
                            return new (window[type])(value);
                        }
                    }
                    return value;
                });
    };


    function getCategories() {
        var webserviceURL = 'http://www.theprintersinc.co.uk/TPIWS.asmx/getCategories';
        var myData;

        $.ajax({
            type: "GET",
            contentType: "application/json; charset=utf-8",
            url: webserviceURL,
            data: { galleryGuid: 1 },
            dataType: "jsonp",
            complete: function (msg) {
                if (msg) {

                var myObject = parseJSON(msg.responseText);
                var myCatList = parseJSON(myObject.d);

                        if (myCatList) {
                             catList = myCatList;
                             setCatDDL();
                        };
                };
                //reset close button
             },
            error: function (xhr, ajaxOptions, thrownError) {
                var err = "err";
            }
         });

    };

您可以在 http://www.theprintersinc.co.uk/stackHelp.html 的域上看到此功能 但是,当我尝试从我的电脑或另一台服务器上的简单 html 文件运行此代码时,它不起作用。我刚刚从 jbug 收到语法错误。

提前非常感谢任何和所有帮助!

尼克

【问题讨论】:

  • 响应不是 JSONP
  • 在我的域上,它至少会触发并返回一个可解析的响应,一旦它位于不同的域上,它就会显示语法错误。
  • 您有什么建议吗?如果您需要查看网络服务,请告诉我...
  • 您的网络服务必须将 JSON 包装在函数调用中。函数的名称必须与传递给 Web 服务的 callback 参数相同。结果应该看起来像 jQuery1234567({"foo":"bar"}); ,然后响应是 JSONP

标签: jquery ajax web-services cross-domain jsonp


【解决方案1】:

我不是专家,但是您可以考虑 jquery 文档中关于“同源策略”限制的规定:http://api.jquery.com/jQuery.getJSON/

“补充说明: 由于浏览器安全限制,大部分“Ajax”请求都受同源策略的约束;请求无法从不同的域、子域或协议成功检索数据。 脚本和 JSONP 请求不受同源策略限制。”

要使用 JSONP,您应该添加 callback=?到您的网址。 在同一个jquery文档中,有一个例子。

【讨论】:

    猜你喜欢
    • 2015-01-17
    • 1970-01-01
    • 2014-03-17
    • 1970-01-01
    • 2014-04-19
    • 1970-01-01
    • 2014-02-09
    • 1970-01-01
    • 2012-11-13
    相关资源
    最近更新 更多