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

少なくとも 2 つ、場合によっては 3 つの問題があり、そのうちの 1 つは単なるデバッグ コードにあると確信しています。

  1. jQuery に を使用するように指示しましたdataType: "application/xml"。引数は MIME タイプではなく、dataTypejQuery 固有のものです。あなたがしたいdataType: "xml"

  2. (これはおそらくデバッグの問題です。)success関数では、XML ドキュメントを関数に渡しているhtmlため、エラーが発生します。それをtext代わりに変更すると、代わりに表示されます。"[object Document]"これは理にかなっています — jQuery は XML を XMLDocumentオブジェクトに逆シリアル化しています。

  3. エンコードせずに XML 文字列を送信しています。data引数に文字列を指定するときは、それが転送用に適切にエンコードされていることを確認する必要があります (参照)。行を変更する必要があると確信しています

    data: xmlString
    

    ...に

    data: encodeURIComponent(xmlString)
    

    最後に XML をサーバーにポストしようとしたのがいつだったか覚えていないので、「ほぼ間違いない」と言います。ただし、送信するものPOSTは通常、URL エンコードする必要があります。

実際の作業例| ソース

于 2012-04-24T09:10:18.327 に答える