2012-09-06 47 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

感謝您的信息。通過回電接着另一個答案 –