0

当我调用这个函数时,我没有得到在调用它的其他函数中使用的返回值。我知道这个请求有效,因为我可以使用 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 语句之前,我是否需要添加一些等待返回值的代码?

4

3 回答 3

2

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

于 2012-05-21T14:13:54.567 回答
1

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

$.ajaxSetup({async:false});

请注意,ajax 不是为此而设计的,它应该是异步的,正如其名称所示:Asynchronous JavaScript and 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
}
于 2012-05-21T14:34:09.593 回答
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 在 part3 之前运行,name=''因此在您调用时发送GetRepName("your_string");

于 2012-05-21T14:37:37.477 回答