来自jquery函数的返回值为空

时间:2012-05-21 14:09:35

标签: jquery ajax

当我调用这个函数时,我没有得到一个返回值,可以在我调用它的其他函数中使用。我知道这个请求有效,因为我可以使用alert()并看到值存在。任何想法都将不胜感激。

function GetRepName(InputStr1){
  var name = '';
  $.post("getrepname.php", {queryString: ""+InputStr1+""}, function(data){
    if(data.length >0) {
      $('#Results'+InputStr1).html(data);
      name = data;
    }
  });
  return name;
}

到目前为止我读过的帖子建议在外部函数中定义变量然后返回,但这似乎不起作用。在发出return语句之前,是否需要添加一些等待返回值的代码?

3 个答案:

答案 0 :(得分:2)

问题是$ .post回调是异步调用的,即函数返回后。您可以同步进行AJAX调用,但不建议这样做。考虑到请求的异步性,最好重新设计代码。

答案 1 :(得分:1)

这可能会解决您的问题,因为这样脚本将停止,直到获得结果:

$.ajaxSetup({async:false});

请注意,ajax不是为此设计的,它应该是异步的,因为它的名称显示它:异步JavaScript和XML


我告诉你我该怎么做:

function fnA(){
   GetRepName();
}

function GetRepName(InputStr1){
  var name = '';
  $.post("getrepname.php", {queryString: ""+InputStr1+""}, function(data){
    if(data.length >0) {
      $('#Results'+InputStr1).html(data);
      name = data;
    }
    //fnB will be called if the ajaxing finished
    fnB(name);
  });
}

function fnB(name)
{
   //do something with name
}

答案 2 :(得分:0)

如果这里的精彩答案,对你来说似乎技术性/混乱。 我把代码分成了段(部分)。看看评论。

function GetRepName(InputStr1){
  var name = '';   // Part1 (runs immediately when you call function)
  $.post("getrepname.php", {queryString: ""+InputStr1+""},  // Part2 (runs immediately after Part1, an ajax request is called by client to server
function(data){ 
    //Part3 (Javascript does an ajax call to server, server executes its code and then send the result back to client, only then the below part of code executes....(i.e. when server sends its response))
    if(data.length >0) {    
      $('#Results'+InputStr1).html(data);
      name = data;
    }

  } /* end of part 3 */); 
  return name;    // Part4 (runs immediately after part2
}

由于Part4在第3部分之前运行,因此当您致电name=''时会发送GetRepName("your_string");