2012-09-06 91 views
0

我有搜索这么多的问题,但没有得到正确的答案。我从我的研究中得出以下函数,我明白ajax调用是异步的,因此它将值传递给全局变量并返回,但是我得到一个空白或未定义的值。我可以用$('#someid' ).html作为回应或其他一些方法,但我不想实现它们。任何知道我做错了这里调用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, 
     success: function(data) 
     { 
      if (data != null || typeof data != 'undefined') { 
       returnData = data; 
      } 
     } 
    }).done(function(data) { 
     returnData = data; 
    }); 

    return returnData; 
}​ 
+5

Ajax是异步的,所以'returnData'将不会设置,直到它完成。调用'SimpleAjax()'将始终返回undefined,因为在函数返回之前ajax请求不会完成。使用回调。 – jeremyharris

+0

正如@jeremyharris刚才所说的那样,您不能返回响应数据,因为它正在异步检索。 – Austin

回答

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); 
}); 
+0

THanks ...它的工作 –

+0

@AbdulBasit,非常好,祝你的项目好运! – CaffGeek

0

找到了答案,以及我认为.done会做魔术和但它不是做阿贾克斯完成后,将返回值.... 只是把这个代码 异步:假,

在阿贾克斯

,也将努力

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; 


     } 
+0

这不是一个好主意。不进行异步回调会导致你很多悲伤。它减慢了页面的速度,并且抵消了使用Ajax的所有优点。 – CaffGeek

+0

请注意,非常不鼓励异步AJAX。它存在很多缺点,并且偏离了Javascript的常见编程模式。 – Austin

+0

感谢您的信息。通过回电接着另一个答案 –