JSONP跨域GET请求不跨域工作

时间:2013-03-08 23:34:05

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

好的,所以我尝试使用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得到语法错误。

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

尼克

1 个答案:

答案 0 :(得分:0)

我不是专家,但您可以考虑jquery文档中有关"相同来源政策"的内容。限制:http://api.jquery.com/jQuery.getJSON/

"附加说明: 由于浏览器安全限制,大多数" Ajax"请求受原始政策的约束;请求无法从其他域,子域或协议成功检索数据。 脚本和JSONP请求不受相同的原始策略限制。"

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