Javascript код с использованием XHR не работает? - PullRequest
0 голосов
/ 17 января 2012

Ниже приведен ответ от сервера (согласно Google Chrome Rest-Client):

Ниже приведен фрагмент кода, который я использую для публикации некоторых данных на нашем сервере. Я хочу получить данные в виде XML-вывода. Имея в виду концепцию единой политики происхождения, я загрузил этот фрагмент кода на наш сервер в виде HTML-страницы, но не получил никакого ответа.

Что-то не так с моим кодом или мой подход неверен?

<html>
<head>
<script type="text/javascript">
function getToken()
{
var xmlhttp;
var txt,x,i;


if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }

alert("stage 1");
xmlhttp.onreadystatechange=function()
  {
     alert("stage 2");
    if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
        alert("stage 3");
     xmlDoc=xmlhttp.responseXML;
     txt="";
     x=xmlDoc.getElementsByTagName("token");
     alert("stage 4");
      for (i=0;i<x.length;i++)
       {
       txt=txt + x[i].childNodes[0].nodeValue + "<br />";
       }
      document.getElementById("myDiv").innerHTML=txt;
    }


  }
 alert("stage 5");
 xmlhttp.open("POST","http://abc.mysite.com:9090/myapi/xxx",true);
 xmlhttp.send("op=login&pass=xxx");
}
</script>
</head>

<body>



<center><h2>UserPreview:</h2></center>
<br />
<div id="myDiv"></div>
<br />
 <button type="button" onclick="getToken()">GetToken</button>
 <div data-role="footer" data-position="fixed" data-theme="a"><h4>Ver: 1.1(17112)</h4>    </div>
</body>
</html>

<response><token>8768768768768768</token></response>

Ответы [ 2 ]

2 голосов
/ 17 января 2012

Вы должны принять во внимание, что: для вызовов AJAX вы можете получить доступ только к тому же имени хоста (и порту / схеме), с которого была загружена ваша страница. Один и тот же домен всегда и тот же ПОРТ :

Каким образом применяется политика того же домена?

В прошлом я использовал это для версии IE, я полагаю, для возможных проблем совместимости:

try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
                    } 
                    catch(e) 
                    {
                        try 
                        {

                        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");

                        }catch(e){}

Я всегда ставлю код так:

var THEURL="http://mysite.abc.com:8080/myapi/xxx"
var data="op=login&pass=xxx";   
http.open("POST",THEURL, true);

http.onreadystatechange = function(){

};
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");   
xmlhttp.setRequestHeader("Content-length", data.length);
xmlhttp.setRequestHeader("Connection", "close");
xmlhttp.send(data);

Разве вы не можете использовать jquery? Это гораздо эффективнее.

Чтобы сделать вызов ajax: http://api.jquery.com/jQuery.ajax/

Например:

$.ajax({
  url: "test.html",
  context: document.body,
  success: function(){
    $(this).addClass("done");
  }
});

Чем раньше вы используете Jquery, тем быстрее ваша работа станет быстрее.

0 голосов
/ 17 января 2012

Если элемент с именем token в вашем xml-файле является элементом xml, а не атрибутом, то вы заменяете следующие строки на -

txt=txt + x[i].childNodes[0].nodeValue + "<br />";

by -

txt += (window.ActiveXObject)?x[i].childNodes[0].text : x[i].childNodes[0].textContent;

Я не спрашивал вас, правильно ли XHR возвращает вам XML или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...