问题描述
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;
}
我得到了休息客户端的响应很好,因为我想在图所示。
I get a response in rest client perfectly as i Want as seen in image
在谷歌浏览器 - >我得到为1,然后4个状态为0,并准备状态在Internet Explorer - >我得到的地位,200 OK,准备状态从1,2,3,4,但一个空白XML返回
In Google Chrome --> I get status as 0 and ready state as 1 and then 4In Internet Explorer --> I get status as 200 OK and ready state goes from 1 , 2, 3, 4 but a blank xml is returned
在其他地区的客户我得到一个完美的命中和一个XML返回
In rest client I get a perfect hit and an xml is returned
我试着问以不同的方式的问题,但一些人认为它是一个交叉的起源问题如果是的话,请让我再知道通过code在JavaScript中的解决方案
I tried asking question in different ways but some say its a cross origin problemIf yes please lemme know the solution via code in javascript
请指导
推荐答案
首先,我建议你重写code与jQuery的帮助。这将压缩您的code,使其跨平台,并且更容易阅读和维护:
Firstly, I suggest rewriting your code with jQuery's help. This would compact your code, make it cross-platform, and easier to read and maintain:
<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格式 - 然后你只需在这个例子中改变数据类型上面JSONP是能够访问的结果,如data.firstname和data.lastname的
总之,你的情况我会创造我自己的Web服务器的本地代理(在你有以上.HTML文件相同的文件夹),将请求转发到其它服务器并返回结果。因此:
Anyway, in your case I would create a local proxy on my own webserver (in the same folder where you have the above .HTML-file) that would forward the request to the other server and return the result. Thus:
$.ajax({
url: "myproxy.php",
type: "POST", ...
然后在myprox.php,这样的事情(我只是假设PHP在这里,但是这可以很容易地移植到ASP.NET或ASP经典):
And then in myprox.php, something like this (I'm just assuming PHP here, but this could be easily ported to ASP.NET or 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会谈到服务器某些URL,它返回数据myproxy.php,从而它的返回数据的脚本。
To clarify: This would make your HTML-page talk to myproxy.php (which lives on the same server [even in the same directory]), then myproxy.php talks to the server at "some url" which returns the data to myproxy.php, which in it's turn returns the data to your script.
祝您好运!
这篇关于HTML5 POST请求正文的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!