2012-04-24 53 views
1

On 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

如果将'url'改为'/ HelsinkiViSe.dll/load',会发生什么? (因为这是你所需要的。) – 2012-04-24 08:52:55

+0

@ T.J。 Crowder同样的问题。但是,我不明白你的意思是“因为这就是你需要的”。 – 2012-04-24 08:57:05

+0

@ Andrei:由于页面位于'http:// 83.150.87.220/HelsinkiViSe/helsinki-map-application/ajax_test.php',并且您正在尝试加载'http://83.150.87.220/HelsinkiViSe.dll/负载“,你可以(并在大多数情况下)使用等效的相对URL而不是绝对的。由于这两个URL都以'http:// 83.150.87.220'开头,所有你需要的是'/ HelsinkiViSe。dll/load',它将相对于当前文档进行解析。 – 2012-04-24 08:59:33

回答

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发送的任何内容通常都应该进行网址编码。

Live working example | source

+0

修复它,谢谢! – 2012-04-24 09:18:56

+0

@Andrei:不客气!我忘了提及对我(使用Chrome和JSBin),我使用原始代码时从jQuery中得到了一个很好的错误信息:“错误:没有从文本到应用程序/ xml的转换”,这正是我指出的正确的方向。试试这里:http://jsbin.com/uhazex也许jQuery版本有所不同?我使用的是Chrome,但是你提到了Chrome,所以我想你也是...... – 2012-04-24 09:21:11

+0

你正在编辑答案,因为我正在写我的评论,并没有注意到它:)。改变dataType参数的建议的确有诀窍。将请求响应传递给'html'jQuery方法也是一个错误,但使用.text()而不是它根本不会显示任何内容(请尝试它)。至于第三个建议,实际上它很好,编码数据实际上使脚本引发了另一个错误。我想下一步是解析响应。 – 2012-04-24 09:27:22