0

我搜索了很多问题,但没有得到正确的答案。我根据我的研究做了以下函数,我知道 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;
}​
4

2 回答 2

4

问题是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);
});
于 2012-09-06T14:10:12.507 回答
0

也找到了答案,我认为 .done 会发挥神奇的作用,并会在 ajax 完成后返回值,但它没有做......只需将此代码异步: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;


      }
于 2012-09-06T14:12:14.920 回答