AJAX例外エラーがあると、ファイルをダウンロードしない、異常な達成直接ダウンロード

要件:エラーがない場合は、エラーメッセージを与えるために、バックエンドのエラーニーズが適切にダウンロードすることができた場合、フロントエンドは、ダウンロードするには、バックエンドインターフェースを呼び出し、ファイルをダウンロードしてください。

ソリューション:

オプション1:最初の考えは、まず二つのインターフェースに分割され、あなたがダウンロードできる場合は、ダウンロードのダウンロードを行くことができるならば、尋ねます

オプションII:区別する状態コードを介してネイティブAJAXリクエスト

xhrGet関数(タイプ、URL、FN){ 
	    // XMLHttpRequestオブジェクトは、バックグラウンドでサーバとデータを交換するために使用される    
	    VAR =新しい新しいXHRのXMLHttpRequestを();             
	    xhr.open(タイプ、URL、真の); 
	    xhr.setRequestHeader(「X - Requested- ''とのXMLHttpRequest '); 
	    xhr.setRequestHeader('同意''ファイルアプリケーション/ JSON、text / plainで、* / *「); 
	    xhr.onreadystatechange =関数(){ 
	      	//のreadyState ==要求4完了している。
	      	場合(xhr.readyState == this.HEADERS_RECEIVED){ 
	      		IF(xhr.getResponseHeader( 'タイプのコンテンツ')== 'ファイルアプリケーション/ vnd.openxmlformats-officedocument.spreadsheetml.sheet'){ 
	      			xhr.abort(); 
	      			window.locationの。 URL = HREF; 
	      			リターン; 
	      		} 
	      	}
	      	IF(xhr.readyStateは== 4 && xhr.status == 200){ 
	        	//从服务器获得数据
	        	{試みる
	        		RES = JSON.parse(xhr.responseText)ましょう。
	        		もし(res.rc == '9'){ 
						window.location.href = location.protocol + "//" + location.host + '/ API /アカウント/ホーム?URL =' + encodeURIComponentで(location.protocol + "//" + location.host + '/#/ホーム'); 
						返します。
					} 
					IF(res.rc == '3'){ 
						window.location.href = "#/ 403"。
						返します。
					} 
	        		fn.call(これ、RES)。
	        	}キャッチ(エラー){ 
	        		  
	        	} 
	        	
	      	} 
	    }。
	    xhr.send(); 
	}

  それがアプリケーションである場合はreadyStateのonreadystatechangeにコールバック関数の我々の方法は、対応するサーバのすなわちヘッドのreadyState == this.HEADERS_RECEIVEDが、戻ってきたとき、我々は、コンテンツタイプの頭を取得する別のreadyStateの状態を識別している/ JSONは間違っています情報、正常動作。あなたはこのような「アプリケーション/ vnd.openxmlformats-officedocument.spreadsheetml.sheet」などのExcelファイルなどのコンテンツタイプに対応するファイルをダウンロードした場合、我々は時間をあきらめて、ダウンロードしたファイルへの直接アクセスは、通常ダウンロードします。

readyStateのステータス情報の様々な段階を添付してください。

 

おすすめ

転載: www.cnblogs.com/leejay6567/p/11363055.html