2013-03-08 156 views
0

好吧,所以我嘗試使用jsonp跨域ajax webservice調用返回一個類別列表來填充下拉列表,並得到更奇怪的結果。我儘可能多地使用了一些示例,並且在我的域上有一個jsonp請求,但它不適用於其他域。下面JSONP跨域GET請求不能跨域使用

代碼:

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得到一個語法錯誤。

任何和所有的幫助提前非常感謝!

尼克

+0

響應不是JSONP – 2013-03-08 23:55:26

+0

在我的域中,至少會觸發並返回一個可解析的響應,只要它位於不同的域上,它就會顯示語法錯誤。 – 2013-03-09 00:54:03

+0

你有什麼建議,爲什麼這可能是?讓我知道如果您需要查看webservice ... – 2013-03-09 00:54:42

回答

0

我不是專家,但是你可以考慮是什麼樣的「同源策略」限制jQuery的文件中規定:http://api.jquery.com/jQuery.getJSON/

「其他注意事項: 由於瀏覽器安全限制,大多數「Ajax」請求都受到相同的源策略的限制;請求無法成功從不同的域,子域或協議檢索數據 腳本和JSONP請求不受相同的源策略限制。

要使用JSONP,您應該添加回調=?到您的網址。 在同一個jquery文檔中,有一個例子。