我试图用本机javascript进行跨域ajax调用,它可以解决任何jsonp技术,我想知道它是如何可能的。我读到由于安全风险,无法进行跨域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 :(得分:0)
该网站具有Access-Control-Allow-Origin: *
响应标头,允许来自任何(*
)网站的跨源请求。
这使服务器忽略安全风险并发送响应。但是,我建议您使用脚本标记和回调而不是xhr来请求数据,这是请求JSONP的标准方法(即jQuery的$.getJSON
函数)。它更可靠。
答案 1 :(得分:0)
可能是这些代码行解决了您在asp .net&amp ;;中创建的常规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);
}
你可以做一件事,只需要设置Access-Control-Allow-Origin&amp; CustomeHeaders中的Access-Control-Allow-Header是您的Web服务web.config文件。
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
如果您只想允许特定域,则可以使用域的特定值而不是*值
来实现