在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>
问题是错误处理程序仍然启动,而成功处理程序则没有启动。这给了我白发。你知道这可能是什么原因以及如何解决它?
提前致谢。
安德烈
答案 0 :(得分:2)
至少有两个,可能还有三个问题,其中一个我确定只是调试代码:
您告诉jQuery使用dataType: "application/xml"
。 dataType
参数不是MIME类型,它是特定于jQuery的东西。你想要dataType: "xml"
。
(这可能是调试的事情。)在success
函数中,您将XML文档传递给html
函数,这会引发错误。如果您将其更改为text
,则会显示"[object Document]"
,这是有道理的 - jQuery已将XML反序列化为XML Document
对象。
您正在发送XML字符串而不对其进行编码。当您为data
参数指定字符串时,您负责确保其正确编码以进行传输(reference)。我很确定你需要改变这条线
data: xmlString
...至
data: encodeURIComponent(xmlString)
我说“相当肯定”,因为我不记得上次尝试将XML发布到服务器时。但是,您通过POST
发送的任何内容通常都应采用网址编码。