【问题标题】:HTML5 Post Request BodyHTML5 发布请求正文
【发布时间】:2014-02-12 10:43:00
【问题描述】:
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;
  }

我在休息客户端中得到了完美的响应,如图所示

在 Google Chrome 中 --> 我的状态为 0,就绪状态为 1,然后是 4 在 Internet Explorer 中 --> 我的状态为 200 OK,就绪状态从 1 , 2, 3, 4 但返回一个空白 xml

在休息客户端我得到一个完美的命中并返回一个 xml

我尝试以不同的方式提问,但有人说这是一个跨源问题 如果是,请通过javascript中的代码了解解决方案

请指导

【问题讨论】:

  • 您多次被要求检查 JS 错误控制台并查看浏览器开发人员工具中的 Net 选项卡,以便调试此问题。你似乎还没有这样做。
  • 如果您的问题不是以这样一种方式形成的,您可以得到一个好的答案,那么编辑问题;不要一遍又一遍地问……
  • 我在 console.log 行中收到一个错误......但是当我评论它时没有任何反应......它只是通过它有什么问题???
  • “一个错误”。 什么错误?
  • 请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问 Origin 'null'。

标签: ajax xml web-services xmlhttprequest


【解决方案1】:

首先,我建议在 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”这样的结果

无论如何,在您的情况下,我会在我自己的网络服务器上(在您拥有上述 .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 在“某个 url”与服务器对话,返回数据到 myproxy.php,然后它又将数据返回到您的脚本。

祝你好运!

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我应该在这里写什么来获取纯文本
    • "数据应该在 req.responseText 中。"
    • 我得到了 xml 数据,但在输入 console.log("something") 后出现错误:'console' is undefined
    • 没有这个控制台线...我无法检索数据
    • 是的。如果标题可以由想要权限的页面设置,那么标题就没有什么意义了。
    【解决方案3】:

    我不确定,但请您在下面一行的末尾添加一个分号 (;)。由于缺少分号,它可能无法正常工作。

    console.log("2")
    

    改成

    console.log("2");
    

    【讨论】:

    • 如果这些语句的分号在一行上,JavaScript 会忽略它们
    猜你喜欢
    • 2020-12-13
    • 2018-02-23
    • 2020-04-12
    • 1970-01-01
    • 2018-08-18
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多