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 はこれ用に設計されていないことに注意してください。その名前が示すように、非同期にする必要があります: 非同期 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
}
于 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 に答える