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>tech@2014</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;
}
我在休息客户端得到的回应完全像我想要的那样在图片
中在谷歌浏览器中 - &gt;我的状态为0,就绪状态为1,然后是4 在Internet Explorer中 - &gt;我获得状态为200 OK并且就绪状态从1,2,3,4变为但是返回空白xml
在休息客户端,我得到一个完美的命中,并返回xml
我尝试用不同的方式提问,但有些人说这是一个交叉问题 如果是,请通过javascript中的代码了解解决方案
请指导
答案 0 :(得分: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>
其次,源自您的服务器的javascript(例如www.myserver.com)无法与其他服务器通信(即您无法从www.anotherserver.com请求数据)。 嗯,你可以,但如果是这样,你需要确保从www.anotherserver.com发送的答案是JSONP格式 - 然后你只需将上面例子中的“dataType”更改为“jsonp”即可能够访问“data.firstname”和“data.lastname”等结果。
无论如何,在你的情况下,我会在我自己的网络服务器上创建一个本地代理(在你拥有上述.HTML文件的同一文件夹中),它会将请求转发给其他服务器并返回结果。因此:
$.ajax({
url: "myproxy.php",
type: "POST", ...
然后在myprox.php中,这样的事情(我只是在这里假设PHP,但这可以很容易地移植到ASP.NET或ASP Classic):
<?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在“some url”与服务器对话,返回数据到myproxy.php,然后又将数据返回到你的脚本。
祝你好运!
答案 1 :(得分:3)
服务器说它正在发送text/plain
数据,而不是XML,因此浏览器不会填充req.responseXML
。数据应位于req.responseText
。
答案 2 :(得分:0)
我不确定但是你可以在下面一行的末尾添加一个分号(;)。由于缺少分号,它可能无法正常工作。
console.log("2")
更改为
console.log("2");