2009-08-25 137 views
0

我試圖從函數返回$ ajax調用返回的值,但它只返回「undefined」。如果警報來自ajax調用的「響應」,它將返回臨界值。下面是代碼,我是不是做錯了什麼?:Jquery:將ajax調用的值返回給調用者函數?

$(".insertCandidate").live("click", (function(e) { 
      var ids = this.id.toString().split("|"); 
      var tempCanID = ids[1]; 
      var canID = ids[0]; 
      var tempName = CandidateName(tempCanID); 
      var canName = CandidateName(canID); 
      //alert("HTML: "+tempName); 
      $("#mergeCandidateDialog").empty(); 
      $.blockUI({ message: $("#mergeCandidateDialog").append(
       "<div>" + tempName + "s ansøgning til vil blive lagt under den eksiterende ansøger s data.<br /><br /> Ønsker du at fortsætte?<br /><br /></div>" + 
       "<div id=\"content\">" + 
       "<input type=\"button\" id=\"" + ids + "\" class=\"insertCandidateYes\" value=\"Ja\" />" + 
       "<input type=\"button\" id=\"insertCandidateNo\" value=\"Nej\" /></div>"), css: { cursor: 'default', fontWeight: 'normal', padding: '7px', textAlign: 'left' } 
      }); 
     })); 

function CandidateName(candidateID) { 
     var returnstring; 
     $.ajax({ 
      type: "POST", 
      url: "/Admin/GetCandidateName/", 
      data: { 'candidateID': candidateID }, 
      succes: function(response) { 
       returnstring = response; 
       return; 
      }, 
      error: function(response) { 
       alert("FEJL: " + response); 
      } 
     }); 

     return returnstring; 
    } 

回答

3

,除非你等待Ajax調用採用非同步完成你不能做到這一點:假的。然而,我不會這樣做,因爲它鎖定了瀏覽器,如果調用失敗返回,用戶將不得不崩潰。重構腳本並在.ajax調用的成功函數內調用回調函數更好。

見我的回答類似的問題here

-2
$.ajax({ 
     type: "POST", 
     url: "/Admin/GetCandidateName/", 
     data: { 'candidateID': candidateID }, 
     success: function(response) { 
      return response;//USE THIS 

      //THIS WILL RETURN FROM THE FUNCTION WITHOUT RETURNING ANY VALUE 
      //return; 
     }, 
+0

好吧,我需要ajax調用在一個函數中,當腳本使用張貼在一個函數中,這也不起作用。我嘗試過這個。 – Poku 2009-08-25 10:39:08

+0

成功函數(如果您正確拼寫名稱)在響應事件觸發時被調用。它不會被調用$ .ajax函數的函數調用。 (這裏的$是什麼?我不認識這個模式。http://blog.dorward.me.uk/2009/02/19/the-dollar-function-must-die.html) – Quentin 2009-08-25 10:56:18

+0

@大衛拼寫成功來自問題的代碼。 – TheVillageIdiot 2009-08-25 11:09:23

1

異步真實屬性添加到您的通話阿賈克斯:

type: "POST", 
    async: false, // ADD THIS 
    url: "/Admin/GetCandidateName/", 

而且,你離開了一個「s」上的成功。

可以這樣做。

+0

asynch默認爲true,不知道這有什麼幫助? – redsquare 2009-08-25 11:32:23

0

你正在做2個相同的ajax請求。爲了提高性能,您應該將一個ID數組傳遞給您的CandidateName方法,然後您的服務器端腳本也應該返回一個匹配名稱的數組。