2010-07-01 86 views
2

我試圖做一個與本地JavaScript跨域AJAX調用,它適用於任何JSONP技術,我想知道它是如何可能的。我讀了跨域Ajax調用不能作出了應有的安全風險跨域AJAX調用

<html> 
<head> 

<script type="text/javascript"> 



function loadXMLDoc() 
{ 
url=document.getElementById('url_data').value; 
if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
xmlhttp.onreadystatechange=function() 
    { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText; 
    } 
    } 
xmlhttp.open("GET",url,true); 
xmlhttp.send(); 
} 
</script> 
</head> 
<body> 

<h2>AJAX</h2> 
<div id="myDiv"></div> 

<input type"text" id="url_data" value="http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20flickr.photos.info%20where%20photo_id%3D'2186714153'&format=json"/> 

<button type="button" onclick="loadXMLDoc()">Request data</button> 
</body> 
</html> 

可有一個人幫我

+0

的可能重複(HTTP [使用AJAX加載外部內容]://計算器。 com/questions/3157592/load-external-content-using-ajax) – Quentin 2010-07-01 20:30:08

回答

0

該網站有Access-Control-Allow-Origin: *響應頭,它允許從任何(*)站點跨域請求。

這使服務器忽略安全風險併發送響應。不過,我建議你使用腳本標記和回調代替xhr來請求數據,這是請求JSONP的標準方法(即jQuery的$.getJSON函數)。它更可靠。

+0

如何查看Access-Control-Allow-Origin頭文件?我嘗試在單獨的div中顯示xmlhttp.getAllResponseHeaders(),我得到的全部內容是:Content-Type:application/json; charset = utf-8 Cache-Control:no-cache,private' – brainjam 2010-07-01 23:07:47

+0

如果您使用Firefox的網絡監視器您可以有效地看到標題包含'Access-Control-Allow-Origin:*' – 2014-07-27 09:21:49

0

可能是這幾行代碼解決您的問題,這是使用ASP.NET的&調用創建常規的Web服務的ajax

  var jsonData = [YOUR JSON PARAMETER]; 

      $.ajax({ 
       async: false, 
       type: "POST", 
       url: [YOUR WEB SERVICE URL], 
       contentType: "application/json; charset=utf-8",     
       data: JSON.stringify({ json: jsonData }), 
       dataType: "json",     
       success: OnSuccess, 
       failure: function(err) { 
        alert("Error : " + err.d); 
       } 
      }); 

      function OnSuccess(data) { 
       alert("Success:" + data.d);      
      } 

你可以做一件事對於只需要設置接入控制 - Allow-Origin &訪問控制 - 允許在CustomeHeaders您的Web服務web.config文件中的頭。

<add name="Access-Control-Allow-Origin" value="*" /> 
<add name="Access-Control-Allow-Headers" value="Content-Type" /> 

如果你想只允許特定的域,你可以做到這一點與領域特定值,而不是*值