2010-07-01 80 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" /> 

如果你想只允许特定的域,你可以做到这一点与领域特定值,而不是*值