在另一个调用ajax结束之前调用ajax

时间:2018-03-24 20:58:18

标签: javascript jquery ajax

我有一个负责上传的ajax调用(通过SFTP)。它们是大文件,所以我无法锁定页面。 在同一页面上,我有一个搜索字段,通过ajax在表格中显示结果。 问题:当我调用上传ajax屏幕上的所有内容仍然有效,但搜索ajax请求只在上传结束时刷新表。如何在ajax上传完成之前请求搜索ajax并在屏幕上显示结果?

注意:所有调用都是异步的

$(document).on("keyup", "#idsearchall", function(){
    var valor = $(this).val();      
    updatetable(valor);
});
function ajax(options) {
  return new Promise(function (resolve, reject) {
    $.ajax(options).done(resolve).fail(reject);
  });
}
var updatetable = function(text){
    ajax({
        method: "POST",
        url: ".../index.php?status=ajax",
        async: true,
        data: {mk: 4,  search: text}
    }).then( 
      function sucess(data, textStatus, jqXHR) {
        $('#tablesearchall').html(data); //Success works well               
      },
      function fail(jqXHR, textStatus, errorThrown) {
        console.log(textStatus, errorThrown);
      }
    ).catch(function errorHandler(error) {
        console.log(error);                 
    }); 
};
$(document).on("click", "a[input-send='upload']", function(){
//**... ... ... codes to get file information
var formData = new FormData();                      
formData.append('documento[]', fileSelect[0], fileSelect[0].name);
ajax({
    method: "POST",
    url: ".../transmissao.php?status=ajax&mk=1",    
    data: formData,
    processData: false, 
    async: true,
    contentType: false  
}).then(
  function sucess(data, textStatus, jqXHR) {
    var splitmsg = data.split("|");
    if(parseInt(splitmsg[0])== 1){
        var pathftp = splitmsg[1];                          
        alert('success', "info"); //Success works well      
    }
  },
  function fail(jqXHR, textStatus, errorThrown) {
    console.log(textStatus, errorThrown);
  }                   
).catch(function errorHandler(error) {
    console.log(error);         
});});

showing both calls as pending

非常感谢提前

2 个答案:

答案 0 :(得分:0)

这是我在评论中的意思?这不适合你正在尝试的东西吗?

$.when(
    $.ajax({
        url: '/echo/html/',
        success: function(data) {
            alert('request complete')
        }
    }),
    $.ajax({
        url: '/echo/html/',
        success: function(data) {
            alert('request complete')
        }
    })
).then( function(){
    alert('all complete');
});

答案 1 :(得分:0)

解决!! 问题出在php会话中

在php文件中:

//Get info Session
$user  = $_SESSION['id'];
//write and close the session to answer the request
session_write_close(); 
/***
**** here is the upload part
***/
session_start($user); //I reopen the session