2009-08-25 84 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方法,然后您的服务器端脚本也应该返回一个匹配名称的数组。