2009-06-09 17 views
8

JQueryを学びたいと思っていますが、私はajaxには小さな問題があります。私は、ページからのXMLレスポンスから返された値を使ってJavaScript配列を生成しようとしています。 (?\バックスラッシュなし):クエリが成功してもJQuery ajaxエラー関数が実行されます

<html> 
<head> 
<script type="text/javascript" src="jquery/jquery.js"></script> 
<script type="text/javascript" src="jquery/fiber.js"></script> 
</head> 
<body> 
<p>Ajax</p> 
<script> 
var ringType = new Array(); 

</script> 
</body> 
</html> 

fiber.jsはこれです:

//process things for fiber map 
jQuery(document).ready(function() { 
// do stuff when DOM is ready 

//populate and display ringType 
$.ajax({ 
    type: "GET", 
    url: "ajaxHelper.pl", 
    data: { 
     getRingTypes: "1", 
     }, 
    dataType: "xml", 
    success: function(xml) { 
     //if the query was successfull, 
     alert("Got an xml object:"+$(xml)); 
     $(xml).find("ringType").each(function(){ 
      alert("Received reply "+$(this).text()); 
      var type = $(this).html(); //save the value 
      //append to ringType array 
      ringType.push(type); 
     }); 
    }, 
    error:function (xhr, ajaxOptions, thrownError){ 
     alert(xhr.status); 
     alert(thrownError); 
    } 
}); 
for(var i=0; i<ringType.length; i++){ 
    document.write("<br>"+ringType[i]); 
} 

}); 

ajaxHelper.plは、このXMLを生成します(たContentとして
はここに私のメインページ(ajax.html)ですタイプtext/xmlで):

<?xml version="1.0" encoding="ISO-8859-1"?> 
    <\?xml version="1.0" encoding="ISO-8859-1"\?> 
    <ringType>IA</ringType> 
    <ringType>IL</ringType> 
    <ringType>IN</ringType> 
    <ringType>IR</ringType> 
    <ringType>RT</ringType> 

の問題は、私はajax.htmlをロードするたびに、Ajaxのクエリが成功しているが、誤差関数が実行されます! xhr.status = 200(クエリが正常だったことを意味します)、thrownExceptionは未定義です。

+0

申し訳ありませんが、XMLが正しく貼り付けられませんでした。ここで再び(いくつかのスペースで)行く: <? xml version = "1.0" encoding = "ISO-8859-1"? > < ringType > IA < ringType > IL < ringType >の < ringType > IR < ringType > RT Adrian

+0

入れてみてくださいの<?xml version = "1.0" エンコード=」 (http://mywebapp/ajaxHelper.pl)でajaxHelper.plファイルを開くと、まだ – karim79

+0

になっていない場合は、出力XMLドキュメントの上部にある「UTF-8」?> XMLからのファイルの応答? –

答えて

4

これはすべてのブラウザで発生しますか?

1)の代わりに、成功とエラーの代わりに状態を処理することができます。 ifを使用してXHRの戻り状況をチェックし、それに応じて分岐します。

http://docs.jquery.com/Ajax/jQuery.ajax#options

+0

この現象はすべてのブラウザで発生します。私は成功の代わりに完全を使用しようとし、私はあなたに知らせるでしょう。 – Adrian

+1

私は完全な関数を追加しました。ステータスをチェックすると、 "parsererror"が出ます - 送信するxmlが無効であることを意味します。少なくとも私はどこで掘り続けるべきか知っています。ありがとうございました! – Adrian

+0

明らかに、XMLsはxsdの定義を有効にする必要があります。私のコードはそれらなしで動作しません。今、(私は欠けている定義を作成しました)、すべて期待どおりに動作します。 – Adrian

1

AJAXは非同期です。つまり、$ .ajax関数がリクエストajaxHelper.plを開始することを意味します。その間、あなたのコードを実行し続けます。リクエストはあなたが$アヤックス(...)

for(var i=0; i<ringType.length; i++){... 

後に次の行を返すチャンス到達していない前に、だから私は、あなたがringTypeが定義されていないという例外を取得していると仮定しますか...?そしてそれがエラー機能が引き起こされる理由かもしれません。

+0

十分ですが、成功関数の起動からアラートを起動することさえできません。 – Adrian

+0

エラーがスローされると、スクリプトの実行が停止します。私は例外を処理する方法をjQueryの内部では見ていませんが、コールバック内でforループを動かしてみてください。 – gregers

5

http://groups.google.com/group/jquery-en/browse_thread/thread/23679594ebe128a9を介してサーバは200のステータスコードを使用してXML文書を返すことができます。しかし、ブラウザがドキュメントを解析できない場合、parseerrorが発生し、jQueryのエラーハンドラが呼び出されます。

あなたは有効なXMLを返すしていることを確認します:)

+0

この問題はありましたが、JSONの結果がありました。修正は同じですが、うまくいっていました:有効なJSONを返してください。ブラウザは喜んで正しいイベントを呼び出します。 – dbarros

関連する問題