2009-07-21 14 views
2

ボタンが押されたときに次のajaxリクエストを実行するページがあります。プロトタイプを含むajaxリクエストは、空白のhtmlページ(断続的)を使用して200成功を返します

通常、私はjsonオブジェクトを取得して正常に動作しますが、断続的な要求(通常はそのページからの最初の要求のみ)に気が付いたので、空白のページで200成功コードを返します。

htmlページをリロードしてからボタンをもう一度押すと、その後すぐに正常に機能します。私は意志で問題を複製することはできませんが、それは私はそれが最も可能性の高いAJAXまたは特定している場合、私はちょうど疑問に思って

それについて何かをする必要があることを定期的に十分に起こっているわけ断続によって

プロトタイプ問題またはサーバー側の問題(私はdebian/apahce/phpを使用しています)

問題を追跡するにはどうすればよいですか?あなたが提供された例に基づいて

new Ajax.Request(url, 
{ 
    method:'post', 
    parameters: $('TeamForm').serialize(true), 
    onSuccess: function(transport) { 
     // do stuff      

    }, 
    onFailure: function(transport) { 
     // display error 

    } 
}); 
+0

Firefox 3.5、おそらくFirebugを使用しているとしますか? –

+0

はい私は正しいデータを投稿して空白のページを返すことを確認するためにそれを使用しています。 Google Chromeとエクスプローラで同じ問題が発生しました – bumperbox

+0

ChromeとIEで同じ問題が発生した場合は、あなたの問題がthieページの問題だとは思わない:http://code.google.com/ p/fbug/issues/detail?id = 1948(詳細はこちら:http://www.nczonline.net/blog/2009/07/09/firefox-35firebug-xmlhttprequest-and-readystatechange-bug/) –

答えて

0

、私はJavaScriptで見ることができるの懸念の唯一のソースは、$(「TeamForm」)である(真)シリアライズ。ステートメント。 TeamFormのデータが整形式であり、PHPのバックエンドがこれを適切に処理していると確信していますか?

後ろに空白がないかPHPコードをチェックしてください。閉じたタグでPHPファイルを終了しないでください。

<?php 
class Foo { 
} 
?> //There is a space after this closing tag! 

あなたのブラウザに秘密のスペースが送信されることになります。

<?php 
class Foo { 
} 

をまた、ブラウザに出力を送信することができる任意のエコーのか、印刷のためにあなたのコードをチェック:それは有効な構文(および推奨)は純粋なPHPファイルのオフ終了タグを残すことです。また、エラーメッセージがブラウザにもデータが送信される可能性があるため、display_errors設定を確認してください。

私はサーバー側の問題に99:1のオッズを付けました。

+0

ファイアバグによると、serialize部分はうまくいきます。後ろに空白がありません。それについてもっと考えてみると、私はそれがサーバー側の問題であることに同意します。私がちょうど見つけたことの1つは、json_encodeがutf8文字だけを好きで、強制していないので、いくつかのテストを行い、それが問題かどうかを確認することです。 – bumperbox

+0

シリアル化が失敗したことを暗示していませんでした。私は、そのシリアライゼーションの内容がサーバー側で予期しないものになる可能性があることを示唆していました。サーバー側でクラッシュまたはエラーが発生する可能性があります。この問題を示すデモページがありますか? – hobodave

+0

サーバーサイドスクリプトをデバッグするときは、try/catchブロックと可能なカスタムエラーハンドラを使用するようにしてください。あなたがJSONデータを期待している場合、エラーが本当に捕捉される必要があります。そうしないと、あなたは経験している動作に終わります。 – Josh

1

これは問題の解決策ではありませんが、その間に応答のresponseJSONプロパティがNULLであるかどうかを検出し、そうであればエラーをログに記録して要求を再送信します。そうすれば、少なくとも2番目のリクエストが通過するはずです。これを処理する最も簡単な方法は、onSuccessハンドラからカスタムオブジェクトをスローして、onFailureハンドラがそれを捕まえて再送信できるようにすることです。

+0

良いアイデアは、私はそれを正しく修正することを好むだろうが、少なくとも私はフォールバックオプションが今 – bumperbox

関連する問題