2010-07-01 3 views
2

Я попытался сделать перекрестный домен ajax-вызов с собственным javascript, и он работает без каких-либо методов 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

возможно дубликат [Загрузка внешнего содержимого с помощью AJAX] (HTTP: // StackOverflow. com/questions/3157592/load-external-content-using-ajax) – Quentin

ответ

0

Сайт имеет заголовок Access-Control-Allow-Origin: * ответа, который позволяет запросы кросс-происхождения из любого (*) сайта ,

Это заставляет сервер игнорировать угрозу безопасности и отправлять ответ. Тем не менее, я предлагаю вам использовать тег скрипта и обратный вызов вместо xhr для запроса данных, который является стандартным методом запроса JSONP (то есть функции $.getJSON jQuery). Это намного надежнее.

+0

Как вы можете увидеть заголовок Access-Control-Allow-Origin? Я попытался отобразить xmlhttp.getAllResponseHeaders() в отдельном div, и все, что я получил, это «Content-Type: application/json; charset = utf-8 Cache-Control: no-cache, private» – brainjam

+0

Если вы используете Network Monitor of Firefox вы можете эффективно видеть, что заголовок содержит «Access-Control-Allow-Origin: *' –

0

Может быть эти строки кода решить вашу проблему, которая для регулярного веб-сервиса, созданного в ASP .NET & вызова с использованием 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 & Access-Control-Allow-Headers в CustomeHeaders ваш веб-сервис web.config.

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

Если вы хотите разрешить только для конкретного домена, вы можете сделать это с определенным значением домена вместо * значения

Смежные вопросы