0

js で複数の http get リクエストを作成しようとしています。しかし、私はまったくの初心者です。私はjQueryにも反対しません。アイデアは、自分のサーバーを呼び出して、js チャートを作成できるようにすることです。

var client;
function handler() { 
    if(client.readyState == 4 && client.status == 200) { 
        // make a chart
    }
} 

window.onload = function() { 
    client = new XMLHttpRequest(); 
    client.onreadystatechanged = handler; 
    client.open("GET", "http://someurl/stuff"); 
    client.send();
}

以上が Web リクエストの基本的な考え方です。ハンドラーがコールバックまたはイベントを実行しているようです。これは、1 つの get 要求を作成するときに機能します。しかし、2 つ以上作成すると、さまざまな結果が得られます。すべてのリクエストが機能する場合もあれば、機能しない場合もあれば、1 つだけの場合もあります。発生するエラーは、接続が閉じられていないことです。

4

1 に答える 1

0

このコードの主な問題は、同じグローバル変数 (例: ) を使用していることです。これclient複数のリクエストが上書きされると失敗するだけです。

(リクエストの非同期性のためにハンドラー呼び出しの順序が定義されていないという問題は、指定されたコードで XHR オブジェクトを作成/使用する再入可能性の欠如の二次的なものにすぎません - ハンドラーが変数にアクセスするときに正しい XHR オブジェクトが保証されclientます!)

クロージャーとオブジェクトはこの問題を回避しますが、.. jQuery (または、できれば Promises を備えた、優れた XHR インターフェイスを提供するお好みのライブラリ) を使用してください。

「jqueryに反対しない」ので、それを使用してください。返されたデータを使用して、コールバック (または promise ハンドラー) 内からのみ作業を行うように注意してください。これは、リクエストが非同期であるためです。

于 2013-11-13T23:22:28.193 に答える