9

私はウェブを見回して(明らかに間違った場所で)、ajax(jquery post)の目的の成功と失敗の基準を見つけました。

たとえば、php スクリプトに投稿するために ajax を使用しているとします。スクリプトは以下を返すことができます。

  • 出口 0
  • 1番出口
  • ジェイソン・アレイ
  • 戻る
  • 等...

これらの戻り値は、いつ成功に変換され、いつ失敗に変換されますか?

ご存知かもしれませんが、$.ajax() は beforeSend、success、error、および complete コールバックをサポートしています。

したがって、適切なコールバックをトリガーするために、成功した場合と失敗した場合に、スクリプトは何を送信する必要がありますか。

4

3 に答える 3

6

ベンは正しいですが、少し拡大します。

jQuery は、呼び出されたページの HTTP 応答コードに基づいて成功または失敗を判断します。これは、返される応答の内容と同じではないことに注意してください。

例として、PHP スクリプトがhttp://url.com/script.phpにあるとします。

ユーザーがそのサイトにアクセスすると、サーバーから応答が返されます。その応答は、JSON オブジェクト、HTML ページ、または空の応答である可能性があります。これらすべてのケースで、応答コードは 200 になる可能性があります。200 応答コードは、サーバーが要求を理解し、それを受け入れ、何かを送り返したことを意味します。

ここで、ユーザーがhttp://url.com/notascript.phpにアクセスしようとしたとします。

サーバーはそれをどうするかわかりnotascript.phpません (実際には存在しないと仮定します)。リクエストに失敗し、おそらくレスポンス コード 404 (または 4xx の範囲内の何か) でレスポンスを返します。

実際の URL がわかっている場合、jQuery のエラー ハンドラはどのように呼び出されるのでしょうか。

さて、あなたの AJAX 呼び出しがブログ投稿を読み込もうとしていて、次のような呼び出しをしようとしているとしましょう: http://url.com/post?id=5. ID が 5 のブログ エントリがないと PHP スクリプトが判断した場合は、おそらく成功応答を返すべきではありません。むしろ、4xx 応答の方が適切です。PHP には、そのための組み込み関数があります。

<?php

http_response_code(404);

?>

これで、応答が失敗として jQuery によって読み取られ、エラー ハンドラーが呼び出されます。

参考文献:

http_response_code() 関数

HTTP 応答コードを定義するRFC2616

休み

于 2013-03-01T22:02:41.420 に答える
3

ヘッダー コード (つまり、200 - 成功) に基づいていると思います。ただし、独自の特別なエラーを送り返すことはできます。たとえば、jQuery AJAX 応答でエラーを受け取るにはどうすればよいですか?

リクエストされたページのコードに問題がある場合、Ajax エラーを発生させるべきではありません。Ajax に関する限り、ページが物理的に正常に要求されている限り、ページは適切に機能しています。要求されたページ内のエラーは Ajax の障害ではないため、そのページの読み込みが成功した後にコードで処理する必要があります。上記のリンクのようにカスタム ヘッダーを使用すると、それが簡単になります。

Ajax リクエスト ページ --> ページの読み込み & エラーなし --> ページ リクエストの成功 --> 結果のエラー チェックを実行します

Ajax リクエスト ページ --> ページの読み込みとエラーあり --> ページ リクエストの成功 --> 結果のエラー チェックを実行します

ご覧のとおり、要求されたページにエラーがあっても問題ありません。これは Ajax の障害ではないため、エラーとして扱われるべきではありません。

于 2013-03-01T21:44:15.923 に答える
0

成功のために常に出力される 1 つのパターンを選択できます。Ajax の失敗などの他のケースは、AJAX 自体 (HTTP 応答コード) を介して知ることができます。例:

You always print: yes for success and if correct result found

You always print: no for success and if incorrect result found

上記のいずれも返されなかった場合、その ajax が失敗したか、スクリプトが別の単語を出力した場合は、PHP を確認する必要があります。

于 2013-03-01T21:55:11.043 に答える