1

http://83.150.87.220/HelsinkiViSe/helsinki-map-application/ajax_test.php上,您可以在按下页面顶部的按钮时发送一个非常简单的异步 HTTP 请求。贝娄是它的代码:

var xmlString = "<request><session></session><target_id>20</target_id></request>";

// Build the URL to connect to
var url = "http://83.150.87.220/HelsinkiViSe.dll/load";

$.ajax({ 
    type: "POST", 
    url: url,
    dataType: 'application/xml',
    data: xmlString, 
    success: function(msg) { 
        //var data = JSON.parse(msg); 
        $("#text").html(msg); 
    },
    error: function(jqXHR, textStatus, errorThrown) {
        $("#text").html(jqXHR+'<br>'+textStatus+'<br>'+errorThrown); 
    }
});

如您所见,请求数据块是一段简单的 XML:

var xmlString = "<request><session></session><target_id>20</target_id></request>";

后端脚本也应该响应一个 XML 块,它确实如此(使用 Firebug 和 Chrome 的“代码检查器”监视通信)。这个块是:

<?xml version="1.0" encoding="UTF-8"?>
<response>
  <target>
    <target_id>20</target_id>
    <plot>20803/3</plot>
    <builder>(makasiini L3)</builder>
    <housing_form>avoin</housing_form>
    <block_name>JätkäHieta</block_name>
    <finnish_year></finnish_year>
    <target_name></target_name>
    <target_address></target_address>
    <office_space></office_space>
    <purpose></purpose>
    <reservations></reservations>
    <contacts></contacts>
  </target>
  <status>OK</status>
  <errormsg></errormsg>
</response>

问题是错误处理程序仍然启动,而成功处理程序没有。这让我白发苍苍。你知道这可能是什么原因以及如何解决它吗?

提前致谢。

安德烈

4

1 回答 1

2

至少有两个甚至三个问题,我敢肯定其中一个只是调试代码:

  1. 你已经告诉 jQuery 使用dataType: "application/xml". 该dataType参数不是 MIME 类型,而是特定于 jQuery 的东西。你想要dataType: "xml"

  2. (这可能是调试问题。)在您的success函数中,您将 XML 文档传递给html函数,这将引发错误。如果您将其更改为text,它会"[object Document]"改为显示,这是有道理的 - jQuery 已Document为您将 XML 反序列化为 XML 对象。

  3. 您正在发送 XML 字符串而不对其进行编码。当您为data参数指定一个字符串时,有责任确保它为传输(参考)正确编码。我很确定你需要换行

    data: xmlString
    

    ...到

    data: encodeURIComponent(xmlString)
    

    我说“相当肯定”是因为我不记得上次尝试将 XML 发布到服务器是什么时候了。但是您发送的任何东西POST通常都应该是 URL 编码的。

现场工作示例| 来源

于 2012-04-24T09:10:18.327 回答