2014-02-12 61 views
5
function sendPost(){ 

alert("IN SEND POST"); 


var username = document.myForm.username.value; 
var password = document.myForm.password.value; 
alert("username"+username); 
alert("password"+password); 

console.log("in java script"); 

    var url = "some url"; 

    alert("IN url SEND POST"); 

    var data = "<MESSAGE><HEADER><LOGIN>005693</LOGIN></HEADER><SESSION><LATITUDE>0.0</LATITUDE><LONGITUDE>0.0</LONGITUDE><APP>SRO</APP><ORG>MNM</ORG><TRANSACTION>PRELOGIN</TRANSACTION><KEY>PRELOGIN/ID</KEY><TYPE>PRELOGIN</TYPE></SESSION><PAYLOAD><PRELOGIN><ID>005693</ID><USERNAME>005693</USERNAME><PASSWORD>[email protected]</PASSWORD></PRELOGIN></PAYLOAD></MESSAGE>"; 

console.log("2") 

    var req; 
    if(window.XMLHttpRequest) { 
    console.log("2"); 
    try { 
     req = new XMLHttpRequest(); 
    } catch(e) { 
     req = false; 
    } 
    } 
    else if(window.ActiveXObject) { 
    console.log("3"); 
    try { 
     req = new ActiveXObject("Msxml2.XMLHTTP"); 
    } catch(e) { 
     try { 
     req = new ActiveXObject("Microsoft.XMLHTTP"); 
     } catch(e) { 
     req = false; 
     } 
    } 
    } 


    console.log("4"); 
    req.onreadystatechange=function() 
    { 
    console.log("5"); 
    if (req.readyState==4 && req.status==200) 
    { 
    console.log("ready state accepted"); 
    xmlDoc=req.responseXML; 
    console.log("xmlDoc"+xmlDoc); 
    alert("xmlDoc"+xmlDoc); 
    txt=""; 
    x=xmlDoc.getElementsByTagName("FIRSTNAME"); 
    y=xmlDoc.getElementsByTagName("LASTNAME"); 
    console.log("Response achieved"+x); 
    } 


    } 


req.open("POST",url,true); 
console.log("6"); 
req.setRequestHeader("Content-type","application/xml"); 
req.send(data); 
console.log("7"); 
    return true; 
    } 

我得到了休息客户端的响应很好,因为我想看到的图像HTML5,POST请求主体

在谷歌浏览器 - >我得到的地位,0和准备状态1,然后4 在Internet Explorer中 - >我得到的地位,200 OK,准备状态从1,2,3,4,但那张空白的XML返回

在其他客户端,我得到一个完美的命中和一个XML返回

我尝试用不同的方式提问,但有人说它是一个交叉来源问题 如果是,请让我再知道通过代码JavaScript中的解决方案

请指导

REST CLIENT HIT IMAGE

+0

您已经多次要求检查JS错误控制台,来看看在浏览器开发者工具Net标签,这样就可以调试这个问题。你似乎还没有做到这一点。 – Quentin

+1

如果你的问题没有形成,你可以得到一个很好的答案,然后*编辑问题*;不要一次又一次地问这个问题...... – Quentin

+0

我在console.log中得到一个错误......但是当我评论它时没有任何反应......它只是通过它而出现了什么错误? – Yatin

回答

3

服务器说它发送text/plain数据,而不是XML,因此浏览器将不填充req.responseXML。数据应该在req.responseText

+0

我应该写什么,然后在这里获得明文 – Yatin

+2

“数据应该在req.responseText中。” – Quentin

+0

我得到了xml数据,但输入console.log(“something”)后出现错误错误:'console'未定义 – Yatin

4

首先,我建议用jQuery的帮助重写你的代码。这将压缩你的代码,使其跨平台,并且更容易阅读和维护:

<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script> 
<script type="text/javascript"> 
function sendPost(){ 
    $.ajax({ 
     url: "some url", 
     type: "POST", 
     contentType: "text/xml", 
     data: 
      "<MESSAGE><HEADER><LOGIN>005693</LOGIN></HEADER>" + 
      "<SESSION><LATITUDE>0.0</LATITUDE><LONGITUDE>0.0</LONGITUDE>" + 
      "<APP>SRO</APP><ORG>MNM</ORG><TRANSACTION>PRELOGIN</TRANSACTION>" + 
      "<KEY>PRELOGIN/ID</KEY><TYPE>PRELOGIN</TYPE></SESSION>" + 
      "<PAYLOAD><PRELOGIN><ID>005693</ID>" + 
      "<USERNAME>" + $("#username").val() + "</USERNAME>" + 
      "<PASSWORD>" + $("#password").val() + "</PASSWORD>" + 
      "</PRELOGIN></PAYLOAD></MESSAGE>", 
     dataType: 'xml', 
     success: function(data) { 
      var firstname = $(data).find("FIRSTNAME").text(); 
      var lastname = $(data).find("LASTNAME").text(); 
      alert('Hello ' + firstname + ' ' + lastname); 
     }, 
     error: function(jqXHR, textStatus, errorThrown) { 
      alert('Error'); 
     } 
    }); 
} 
</script> 

其次,从你的服务器的起源(如www.myserver.com)不能与其它服务器进行通信一个javascript (即你不能从www.anotherserver.com申请数据)。 那么你可以,但如果是这样的话,你需要确保从www.anotherserver.com发出的答案是JSONP格式 - 然后你只需将上面例子中的“dataType”改为“jsonp”即可访问结果如“data.firstname”和“data.lastname”

无论如何,在你的情况下,我会在我自己的web服务器上创建一个本地代理(在你有上述.HTML文件的同一个文件夹中),它会将请求转发给其他服务器并返回结果。因此:

$.ajax({ 
     url: "myproxy.php", 
     type: "POST", ... 

然后在myprox.php,这样的事情(我只是假设PHP在这里,但是这可以很容易地移植到ASP.NET或ASP经典):

<?php 
    // myproxy.php forwards the posted data to some other url, and returns the result 
    $clientContext = stream_context_create(array(
     'http' => array(
      'method' => 'POST', 
      'header' => 'Content-Type: text/xml; charset=utf-8', 
      'content' => http_get_request_body() 
     ) 
    )); 
    print file_get_contents("some url", false, $clientContext); 
?> 

澄清:这将使你的HTML页面谈话myproxy.php(它居住在同一个服务器上[即使在同一目录中]),然后myproxy.php与服务器在“某个网址”,它返回的数据myproxy .php,它将把数据返回给你的脚本。

祝你好运!

0

我不确定,但请您在下面一行的末尾添加一个分号(;)。有可能因为缺少分号而无法使用。

console.log("2") 

变化

console.log("2"); 
相关问题