に設定されているとき、私はJavaScriptを使用にかなり新しいですし、任意の助けをいただければ幸いfalseに設定されていないが、XMLHttpRequestの作業内部のコードがありません。 私は、ブラウザーがxmlhttprequestを使用してサーバーからの応答(テスト目的でtrueまたはfalse)を使用し、応答に基づいて、ユーザーがアップロード用のローカルファイルを選択するためのファイル選択ダイアログを開きます。なぜ非同期フラグは、それが真
asyncフラグをFALSEに設定してXMLHttpRequestを作成すると、クライアントがサーバーから「本当の」応答を受け取ると、ファイル選択ダイアログボックスが開きます(Chrome、IEの両方)。
asyncフラグをTRUE(推奨)に設定してXMLHttpRequestを作成すると、クライアントがサーバーから「真の」応答を受け取ると、同じコードパスが適用されますが、ファイル選択ダイアログボックスは開きません。 Chrome用のデバッガにエラーは表示されませんが、IEではまだ動作します。私はそれがTRUEに設定されているときに非同期フラグがFALSEに設定されていないが、ときに、このコードは完璧に動作することを改めて表明したいと思います
...
// user has clicked button to upload a file
$scope.uploadFile = function() {
request = new XMLHttpRequest();
request.open("GET", "some-url", true);// false
request.onreadystatechange = $scope.checkUploadPermissions;
request.send();
}
// the callback
// If the user has permission (based on various factors not shown here)
// we open the dialog
// Otherwise we inform them that they are not allowed
$scope.checkUploadPermissions = function() {
// simplified for brevity
if (request.readyState == 4 && request.status == 200) {
// for this sample, we are only checking if the server returned true/false
var hasPerms = request.responseText;
if (hasPerms === "true") {
$scope.openFileSelector();
}
else {
alert("You do not have permission to upload a file.");
}
}
}
// if the user has permission to proceed, we trigger a click on a hidden element
$scope.openFileSelector = function() {
angular.element("#presentUpload").trigger("click");
}
...
:ここ
はコードです。フラグをTRUEに設定すると、この動作を正しく行うことができます。
ありがとうございます。
は通常、それはだと完了コールバックで実行されなければならないいくつかのものは、そこで行われていません。 – jfriend00
'angular.element( "#presentUpload")とは何ですか?trigger( "click");非同期でajaxを実行しているときに 'openFileSelector()'が呼び出されるかどうか知っていますか?ブラウザ内の一部のアクションは非同期で実行することはできません。実際のユーザーイベントの処理中にのみ動作します。 – jfriend00
@ jfriend00 openFileSelector()の呼び出しは、ユーザーがファイルをアップロードする権限を持っている場合に必要なTODOを含む関数に過ぎません。 'angular.element(「#presentUpload」)への呼び出しトリガ(「クリック」);'単にのonchange ... 'の ' – codephreek