2016-09-26 2 views
1

В $ .ajax есть функция beforeSend, но теперь я пытаюсь использовать XMLHttpRequest, я ищу эквивалентную функцию beforeSend в $ .ajax. Как я могу реализовать его здесь.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 - это просто функция, которая выполняется до отправки аякс-звонка, ничего особенного? Планируете ли вы избавиться от остальной части 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

Не работает –

Смежные вопросы