调用Ajax并返回响应

Calling Ajax and returning response

本文关键字:响应 返回 Ajax 调用      更新时间:2023-09-26

我搜索了很多问题,但没有得到正确的答案。根据我的研究,我制作了以下函数。我知道ajax调用是异步的,所以它完成了向全局变量传递值并返回该值,但我得到了一个空白或未定义的值。我可以用$('#someid').html作为响应或其他一些方法来实现它,但我不想实现它们。知道我在这里做错了什么吗

function SimpleAjax(form, postData, url)
{
    var returnData;
    var sendData;
    if (form == "") {
        sendData = postData;
    }
    else if (postData == "") {
        sendData = $(form).serialize();
    }
    $.ajax({
        type: 'POST',
        url: url,
        cache: false,
        data: sendData,
        success: function(data)
        {
            if (data != null || typeof data != 'undefined') {
                returnData = data;
            }
        }
    }).done(function(data) {
        returnData = data;
    });
    return returnData;
}​

问题是return returnData;发生在成功或已完成的函数执行之前。正如您所说,它是异步的。但是,您的函数SimpleAjax正在同步运行。

因此,它启动Ajax调用$.ajax({ ... });,然后执行return returnData;

我所做的,不是使用全局,那只会让你头疼。但是传入一个函数以在成功时执行,而不是试图返回结果。

类似。。。

function SimpleAjax(form, postData, url, successCallback)
{
    var returnData;
    var sendData;
    if (form == "") {
        sendData = postData;
    }
    else if (postData == "") {
        sendData = $(form).serialize();
    }
    $.ajax({
        type: 'POST',
        url: url,
        cache: false,
        data: sendData,
        success: successCallback
    });
}​
//TODO: set your input parameters
SimpleAjax(form, postdata, url, function(data) {
    alert(data);
});

也找到了答案,我认为.done会发挥神奇的作用,并在ajax完成后返回值,但它没有。。。。只需输入此代码async:false,

在ajax中,它将工作

   function SimpleAjax(form,postData,url)
    {
    var returnData;
   var sendData;
 if (form == "")
  {
    sendData=postData;  
  }
  else if(postData=="")
  {
    sendData=$(form).serialize();     
  }


        $.ajax({
    type:'POST',
    url: url,
    cache: false,
    data:sendData ,
   async: false, 
    success: function(data)                
    {
    if (data != null || typeof data!='undefined')   
    {  
    returnData= data;

    }
    } 

    });

    return returnData;

      }