Как мне преобразовать мой серверный код ASP XmlHttpRequest в клиентский JavaScript? - PullRequest
1 голос
/ 21 февраля 2010

я использую код asp ниже для запроса xml

<%
pXML=Server.URLencode(SearchRequest)
set xmlhttp = server.CreateObject("MSXML2.ServerXMLHTTP")
xmlhtt.open "post", http://OutSideDomain/xml_requests , false
xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
xmlhttp.send  "xml_request=" &pXML
htresult = xmlhttp.responsexml.xml    
%>

Я пытаюсь написать приведенный выше код в javascript (Ajax)

<script type="text/javascript">
function loadXMLDoc()
{
var xmlHttp;

try
  {  
  xmlHttp=new XMLHttpRequest();  }
catch (e)
  { 
   try
    {    
    xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");   
     }
  catch (e)
    {   
     try
      {     
       xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");   
          }
    catch (e)
      {      
      alert("Your browser does not support AJAX!");      
      return false; 
           }    
           } 
            }
  xmlHttp.onreadystatechange=function()
    {
    if(xmlHttp.readyState==4)
      {
      alert(xmlHttp.responseText);
      }
    }   

    var params ='xml_request=' +'<%=pXML>';
    xmlHttp.open("POST","http://OutSideDomain/xml_requests",true);
    xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlHttp.setRequestHeader("Content-length", params.length);
    xmlHttp.setRequestHeader("Connection", "close");
    xmlHttp.send(params);

   }
</script>

Приведенный выше код asp работает нормально и получает ответ xml,

Но в javascript я получаю сообщение об ошибке «Отказано в доступе» в виде xmlHttp.send(params);

в чем проблема для "Отказано в доступе"?,

Я здесь, что от одного HTTP к другому HTTP невозможен ... Но эта вещь работает на моей странице asp ..

Как мне это решить?

в надежде на ваш ответ

1 Ответ

3 голосов
/ 21 февраля 2010

Проблема в различии контекста. Ваш JavaScript-код работает на стороне клиента, поэтому на него распространяется политика Same Origin Policy . Ваш ASP-код работает на стороне сервера, и это не так.

Вы в принципе не можете сделать это с клиента прямо сейчас, хотя предпринимают инициативы *1006*, которые сделают возможным ограниченное количество межсайтовой связи. На данный момент вам лучше продолжать делать это на стороне сервера (несмотря на то, что это приведет к стоимости полосы пропускания).

С другой стороны, если источник, к которому вы пытаетесь подключиться, предоставляет интерфейс JSONP , вы можете использовать его.

...