2013-09-24 140 views
3

我無法通過以下代碼打印成功:jQuery.support.cors = true;。包括行jQuery.support.cors = true;會發出警告信息。那麼,如何避免失去功能?我的主要目標是調用一個返回JSON數據的休息Web服務,我必須利用JSON數據。請幫助我如何實現這一目標?請提供工作示例如何使用jquery調用json響應的ajax請求?

<!doctype html> 
<html lang="en"> 
<head> 
    <meta charset="utf-8"> 
    <title>jQuery.getJSON demo</title> 
    <script src="http://code.jquery.com/jquery-1.9.1.js"></script> 
</head> 
<body> 
<script> 
    jQuery.support.cors = true; 
    $.ajax ({ 
     url: 'http://json-cricket.appspot.com/score.json', 
     datatype: "json", 
     success: function (e) { 
      // Success callback 
      alert("sucess"); 
     }}) 
</script> 

</body> 
</html> 
+0

我認爲選擇是'dataType',而不是全部小寫,但不知道有多大的差別,使得,如果jQuery的可以處理它與否,不記得了。 http://api.jquery.com/jQuery.ajax/ – martincarlin87

+0

「會給出警告信息」哪條消息?跨域問題? –

+0

我認爲這是一個crossdomain ajax請求? http://stackoverflow.com/questions/11736431/make-cross-domain-ajax-jsonp-request-with-jquery/11736771#11736771 嘗試jsonp – cernunnos

回答

3
  1. 你可能會錯過補充type // GET或POST,哪種類型的REST OPEATION的
  2. dataType是拼寫錯誤
  3. 錯過添加contentType

$.ajax({ 
      type: "POST", //rest Type 
      dataType: 'jsonp', //mispelled 
      url: "http://json-cricket.appspot.com/score.json", 
      async: false, 
      contentType: "application/json; charset=utf-8", 
      success: function (msg) { 
       console.log(msg);     
      } 
}); 

更新: 雖然試圖找出原因,我認爲這是best answer瞭解的問題。

假設您位於域名abc.com,並且您想向域名 xyz.com發送請求。要做到這一點,你需要跨越領域的界限,在絕大多數瀏覽器環境中都是不允許的。

繞過此限制的一項是標籤。當您使用腳本標記 時,域限制將被忽略,但在正常的 環境下,您無法對結果做任何事情,只需對 腳本進行評估。

輸入JSONP當您向啓用JSONP 的服務器發出請求時,您會傳遞一個特殊參數,告知服務器關於您的頁面的一點點 位。 這樣,服務器就可以很好地將其響應以其頁面可以處理的方式包裝起來。

0

如果您請求跨域服務,那麼你需要包括jQuery.support.cors = TRUE;。和正確的AJAX代碼將是:

$.ajax ({ 
    url: 'http://json-cricket.appspot.com/score.json', 
    dataType: "json", 
    contentType: "application/json", 
    success: function (jsonData) { 
     // Success callback 
     alert("sucess"); 
    }, 
    error: function() { 
     //any error to be handled 
    } 
}); 
0

CORS(跨來源資源共享)是不一樣的XSS。

$.support.cors包含測試結果,測試當前瀏覽器是否支持cors。改變它並不會讓瀏覽器支持cors。

此外,您的服務器必須通過返回正確的標頭來支持CORS

2

最好的鏡頭將使用jsonp請求。對於這個剛剛指定dataTypejsonp

$.ajax({ 
    url: 'http://json-cricket.appspot.com/score.json', 
    dataType: 'jsonp', 
    success: function (data) { 
     console.log(data);   
    } 
}); 

查看jsFidle

+0

投票贊成小提琴:) –

0

例子試試這個,它提供了最好的結果。這在REST架構中使用,響應速度非常高

function CallService(sucessData) { 
    $.ajax({ 
     // Add code for Cross Domain 
     headers: getHeaders(), 
     type: varType, //GET or POST or PUT or DELETE verb 
     url: varUrl, // Location of the service 
     data: varData, //Data sent to server 
     contentType: varContentType, // content type sent to server 
     dataType: varDataType, //Expected data format from server 
     processdata: varProcessData, //True or False 
     crossDomain: true, 
     timeout: 200000, 
     success: sucessData, 
     error: function (xhr) {// When Service call fails 
      alert("Error: " + xhr.responseText); 
     } 
    }); 
}