2016-12-06 11 views
0

ドキュメントを取得するためにHTTPリクエストをWebサイトに送信するスクリプトがあり、ドキュメントIDは配列に保持されます。 HEADからのステータス(200 OK)に基づいて、各配列要素のリクエストを送信し、メッセージを返したいと思います。JavaScript - 配列内の各要素に対するHTTPリクエスト

問題は、URL配列をループすると、最後の配列要素だけを使用して複数の要求が送信され、他の要素は使用されないということです。

コード:

//send http request 
function sendRequest(url) { 
    var newRequest = new XMLHttpRequest(); 

    newRequest.onreadystatechange = function() { 
    if(newRequest.readyState == 4) { 
     if(newRequest.status == 200) {  
     console.log("loaded: " + url); 
     } else { 
     console.log("Failed to load: " + url); 
     } 
    } 
    } 

    newRequest.open("HEAD", url); 
    newRequest.send(); 
} 

//send request for each url in array 
for(var i = 0; i < urlArray.length; i++) { 
    //get document id and append to link 
    var address = "https://www.adsa.co.uk/library.dr/docs.aspx?id=" + 
       urlArray[i]; 
    //console.log(address + "\n"); 
    sendRequest(address); 
} 

出力(74は配列の最後の要素の値である):
このコンソールメッセージが生成されurlArray.length回:

Failed to load: https://www.adsa.co.uk/library.dr/docs.aspx?id=74 

任意のアイデア理由sendRequest()は各配列要素に対して送信されませんか?

+1

このフィドル:https://jsfiddle.net/y8k9wmkh/はうまくいくようです。 –

+0

ありがとう@ChrisCharles、私はテストのために 'Repl.it'を使っていました。 jsfiddleとjsbinでスクリプトを実行すると、期待どおりに動作しました。 'Repl.it'はループの最後の繰り返しでsendRequestを呼び出すように見えました。 – ethane

答えて

0

感謝を。

上記のコードは必要に応じて実行され、配列全体を反復処理し、各配列要素に対してHTTP要求を送信します。問題はrepl.itread-eval-print-loopコーディング環境で発生しました。 jsbinとjsfiddleに切り替えると、期待した結果が得られました。

Read about REPL

0

クローム(およびFirefox)は、無効なSSL証明書について、したがって、文句接続しません:jsfiddleをしようとする私を警告するためのコメントで@クリスへ

Failed to load resource: net::ERR_INSECURE_RESPONSE 
関連する問題