2012-03-27 41 views
6
jQuery.ajax({ 
      type: "GET", 
      url: 'http://example.com/restaurant/VeryLogin(username,password)', 
      dataType: "json", 

      success: function (data) { 
       alert(data); 
      }, 
      error: function (XMLHttpRequest, textStatus, errorThrown) { 
       alert("error"); 
      } 
     }); 

它警告成功,但數據爲空。 url返回xml數據,如果我們指定dataType,我們可以得到json數據,但是這裏沒有得到任何數據。如何使用ajax調用跨域web api?

任何幫助表示讚賞。

回答

9

JavaScript受同一域名政策約束。這意味着爲了安全,客戶端瀏覽器中的JS腳本只能訪問它來自的同一個域。

JSONP不受同樣的限制。

檢查JSONP jQuery的文檔在這裏:

http://api.jquery.com/jQuery.getJSON/

下面是使用JSONP通過JQuery AJAX訪問跨域服務的工作示例:

http://jsbin.com/idasay/4

而且以防萬一JSBIN將來刪除此貼:

jQuery.ajax({ 
    type: "GET", 
    url: 'http://api.geonames.org/postalCodeLookupJSON?postalcode=6600&country=AT&username=demo', 
    dataType: "jsonp", 
    cache: false, 
    crossDomain: true, 
    processData: true, 


    success: function (data) { 
     alert(JSON.stringify(data)); 
    }, 
    error: function (XMLHttpRequest, textStatus, errorThrown) { 
     alert("error"); 
    } 
}); 
+0

我已經按照鏈接,但它沒有產生結果。 – tiru 2012-03-27 13:07:29

+0

從以前發佈的鏈接中獲取: 「由於瀏覽器安全限制,大多數」Ajax「請求都遵循相同的源策略;請求無法成功從不同的域,子域或協議中檢索數據。不受相同的原產地政策限制。「 – 2012-03-27 13:09:07

+0

我會建議看看如何在上面的鏈接中使用JSONP示例來實現你所需要的。 – 2012-03-27 13:09:57

0

查找jsonp數據類型。

jQuery.ajax({ 
     type: "GET", 
     url: 'http://xxx.com/restaurant/VeryLogin(username,password)', 
     dataType: "jsonp", 
    cache: false, 
     crossDomain: true, 
    processData: true, 

     success: function (data) { 
      alert(data); 
     }, 
     error: function (XMLHttpRequest, textStatus, errorThrown) { 
      alert("error"); 
     } 
    }); 
+0

我跟着你的修改螺母沒有結果。 – tiru 2012-03-27 13:16:55

+0

你必須閱讀關於jsonp。然而,你所調用的頁面並沒有返回jsonp數據。 – 2012-03-27 13:23:53

2

無法使用Ajax直接獲取跨域數據而無需更改後端。它叫做Same origin policy

您可以在後端設置特殊標頭Access-Control-Allow-Originhow do to this)。或者你可以使用JSONP](http://en.wikipedia.org/wiki/JSONP)。