jquery $ .ajax - 错误处理程序启动时没有明显错误

时间:2012-04-24 08:49:44

标签: jquery ajax

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>

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

提前致谢。

安德烈

1 个答案:

答案 0 :(得分:2)

至少有两个,可能还有三个问题,其中一个我确定只是调试代码:

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

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

  3. 您正在发送XML字符串而不对其进行编码。当您为data参数指定字符串时,负责确保其正确编码以进行传输(reference)。我很确定你需要改变这条线

    data: xmlString
    

    ...至

    data: encodeURIComponent(xmlString)
    

    我说“相当肯定”,因为我不记得上次尝试将XML发布到服务器时。但是,您通过POST发送的任何内容通常都应采用网址编码。

  4. Live working example | source