2016-09-26 201 views
1

在$ .ajax中有beforeSend函數,但現在我試圖使用XMLHttpRequest,我正在尋找$ .ajax中beforeSend的等效函數。我如何在這裏實現它。AJAX:什麼是beforeSend函數在XMLHttpRequest中的等效函數

這裏是我的代碼XHR,

xhr = new XMLHttpRequest(); 
    var url = '../ajax/ajax_edit/update_ajax_staffUser.php'; 

    if(file.files.length !== 0){ 

     if(!check(fileUpload.type)){ 
      alert("This file format not accepted"); 
      return false; 
     } 
     xhr.open('post', url+param, true); 
     xhr.setRequestHeader('Content-Type','multipart/form-data'); 
     xhr.setRequestHeader('X-File-Name', fileUpload.name); 
     xhr.setRequestHeader('X-File-Size', fileUpload.size); 
     xhr.setRequestHeader('X-File-Type', fileUpload.type); 
     xhr.send(fileUpload); 
    }else{ 
     xhr.open('post', url+param, true); 
     xhr.setRequestHeader('Content-Type','multipart/form-data'); 
     xhr.send(fileUpload); 
    } 


    xhr.onreadystatechange = function(e){ 
     if(xhr.readyState===4){ 
      if(xhr.status==200){ 
       $('.bounce_dim').show(); 
       setTimeout(function(){ 
        $('.trigger_danger_alert_changable_success').show().delay(5000).fadeOut(); 
        $('#palitan_ng_text_success').html('User successfully modified'); 
        $('#frm_edit_staffUser')[0].reset(); 
        $('#modal_staff').modal('hide'); 
        $('.bounce_dim').hide(); 
       },1000); 
       getUserStaffTable(); 
      } 
     } 
    } 

由於用戶上傳圖片到我的網站,我需要做一個等待界面火災前的呼叫,因爲圖像尺寸過大。

+1

beforesend只是一個在發送ajax調用之前執行的函數,沒有什麼特別的嗎?你是否打算擺脫jQuery相關代碼的其餘部分,包括那些動畫呢?否則,有什麼意義? – adeneo

+0

不,我的意思是,當我點擊按鈕時,它應該首先彈出加載動畫,直到圖像完全上傳。當我點擊按鈕時,會發生什麼情況,用戶不會識別圖片是否仍在上傳。此外,我不希望用戶在我的頁面上執行操作,而圖片仍在上傳 –

+0

另外,因爲我將動畫放在beforeSend中的其他$ .ajax代碼中。 –

回答

4

你可以只把beforeSend()功能您XHR intantiation之前,這樣做:

beforeSend(); 
xhr = new XMLHttpRequest(); 

但你應該定義你beforeSend()上面的代碼之前功能:

var beforeSend = function(){ 
    // your code here 
} 
+0

好吧,那就是爲什麼,謝謝 –

+0

不客氣:) – Argonic

+0

請求同步時不工作 –

1

.beforeSend運行.send之前只是調用函數,所以只要把你的代碼行之前:

xhr.setRequestHeader('Content-Type','multipart/form-data'); 
xhr.setRequestHeader('X-File-Name', fileUpload.name); 
xhr.setRequestHeader('X-File-Size', fileUpload.size); 
xhr.setRequestHeader('X-File-Type', fileUpload.type); 
beforeSend(); // Put any code to run before sending here 
xhr.send(fileUpload); 
+0

這是否意味着我會將我的代碼包裝到$ .ajax beoreSend中? –

+1

@EchoingThroughoutTelNumara否,請參閱更新的答案。發送之前''beforeSend'實際上就是任何代碼。 – lerouche

+0

它不能正常工作 –

相關問題