0

私はAjaxを学んでいて、この例を実行しています。これは何をしますか?variable = function(){関数が変数にどのように割り当てられているのか、構文がわかりません。

xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
    }
  }
4

4 に答える 4

2

readyStateが変更され、リクエストが終了し、レスポンスの準備ができて(readyState==4)、ドキュメントが正しく読み込まれている場合(HTTPステータスコード200= OK!)、IDを持つ要素にレスポンステキストを追加します#txtHint


onreadystatechangereadyStateプロパティが変更されるたびに自動的に呼び出される関数(または関数の名前)を格納します。

readyStateXMLHttpRequestのステータスを保持します。0から4に変更します。

  • 0:リクエストは初期化されていません
  • 1:サーバー接続が確立されました
  • 2:リクエストを受け取りました
  • 3:リクエストの処理
  • 4:リクエストが終了し、レスポンスの準備ができました

statusHTTP応答コードを受け取ります:

  • 200:「OK」
  • 404:ページが見つかりません
于 2012-08-09T18:19:05.223 に答える
2

誰もが具体的にはコールバックだと言っていることは知っていますが、あなたが尋ねた質問は、あなたが困惑していることをいくつかのより馴染みのあるコードと比較することによってよりよく答えられるでしょう。

function myFunction()
{
    ...
}

myFunction()したがって、呼び出しによってそのコードが実行されることがわかります。

Javascriptでは、さまざまな方法で関数を宣言できます。これは、これを意味します:

var myFunction = function()
{
    ...
}

上記の最初の例とまったく同じです。を使用して呼び出すことができる関数を作成しますmyFunction()

質問のミックスにコールバックを追加すると、

xmlhttp.onreadystatechange = function()
{
    ...
}

オブジェクトxmlhttpのonreadystatechangeプロパティに関数を割り当て、コードを含めることに他なりません。つまり、関数内のコードは、xmlhttpオブジェクトに状態が変化するたびに呼び出されます。

于 2012-08-09T18:34:51.970 に答える
1

onreadystatechangeコールバックです。特定のイベントが発生したときにトリガーされます。onreadystateリクエストの準備完了状態が変化したときに発生します。

要するにonreadystate

Stores a function (or the reference of a function) to be called automatically each time the readyState property changes

今ラインのために xmlhttp.readyState==4 && xmlhttp.status==200

readyState : Holds the status of the XMLHttpRequest.

 Changes from 0 to 4: 
0: request not initialized 
1: server connection established
2: request received 
3: processing request 
4: request finished and response is ready

そしてstatusステータスを保持します

200: "OK"
404: Page not found

したがってxmlhttp.readyState==4 && xmlhttp.status==200、応答の準備ができて問題がない場合、条件は真です。

xmlhttp.responseTextサーバーから送信された応答が含まれます。

したがってdocument.getElementById("txtHint").innerHTML=xmlhttp.responseText;、idを持つ要素のHTMLを、txtHint受信した応答に変更します。

上記のすべてが理にかなっていることを願っています!!!

于 2012-08-09T18:27:23.830 に答える
1

私はこのコメントに対処したいと思います:I've never been able to understand callbacks.

この例えを考えてみましょう。

VHSで公開されたばかりの映画をレンタルしたいので、Blockbusterに電話して、アテンダントにコピーがあるかどうか尋ねます。残念ながら、彼らは「ラビリンス」を同時に借りようとしている何千人ものデヴィッド・ボウイのファンとの取引で非常に忙しく、彼はあなたのために情報を調べる時間がありません。代わりに、彼はあなたの電話番号を尋ねます。将来、大勢の人が去り、時間があれば、彼はあなたが必要とする情報を調べ、あなたが提供した番号に電話をかけ直します。映画は完売していることが判明したので、代わりに「ダーククリスタル」を提案します。

あなたの場合、リモートサーバーと通信する必要があるため、動作に時間がかかるエンティティを扱っているため、基本的に電話番号を尋ねられ、完了するとコールバックされます。要求されたデータでした。

今はもっと意味がありますか?

于 2012-08-09T18:58:09.057 に答える