2

ajaxを使用して値を取得している関数を呼び出しています。この値を呼び出し元の関数に返す方法:
ajax呼び出しを 使用した関数は次のとおりです。

function getStatusOfAdv(advID){
   $.ajax({
      url:baseURL+"/admin/advertisers/get.adv.status.php",
      data:"param="+escape(advID),
      dataType:"html",
      cache:"false",
      success:function(result){
         return result;
      }
   });
}

この結果値を呼び出し元の関数に返す必要があります。

function setAdvDetail(advID){
var status = getStatusOfAdv(advID);
alert(status);
}
4

4 に答える 4

2

$.ajaxasync呼び出され、成功する前に getStatusOfAdv 関数が返されるので、成功から関数を呼び出して結果を渡すことができます。

function getStatusOfAdv(advID){
   $.ajax({
      url:baseURL+"/admin/advertisers/get.adv.status.php",
      data:"param="+escape(advID),
      dataType:"html",
      cache:"false",
      success:function(result){
         callYourFunction(result);
      }
   });
}

function callYourFunction(result)
{

}
于 2013-03-13T09:10:05.783 に答える
1

$.ajax()呼び出しは非同期であるためgetStatusOfAdv()、ajax 呼び出しが完了する前に戻ります。そのため、非同期関数の結果を使用するすべてのコードが ajax 成功ハンドラー内にあるか、そのハンドラーから呼び出されるように、コードを再構築する必要があります。

のような同期関数を作成し、そのgetStatusOfAdv()中で非同期呼び出しを使用してから、戻り時に値をgetStatusOfAdv()返すことはできません。非同期 ajax 呼び出しが完了するずっと前に戻るため、実行できませんgetStatusOfAdv()。戻り値は、戻ったときにまだ不明です。

JavaScript の典型的な設計パターンは、非同期操作が完了し、データが利用可能になったときに呼び出されるコールバック関数で、応答が必要な作業を行うことです。

function getStatusOfAdv(advID, fn){
   $.ajax({
      url:baseURL+"/admin/advertisers/get.adv.status.php",
      data:"param="+escape(advID),
      dataType:"html",
      cache:"false",
      success:function(result){
         fn(result);
      }
   });
}

function setAdvDetail(advID){
    getStatusOfAdv(advID, function(status) {
        alert(status);
        // any other code that uses the status goes here
    });
    // the status is NOT known here because the asynch function has
    // not yet completed
}
于 2013-03-13T09:10:08.923 に答える
0

これを試して

    function getStatusOfAdv(advID){
   $.ajax({
      url:baseURL+"/admin/advertisers/get.adv.status.php",
      data:"param="+escape(advID),
      dataType:"html",
      cache:"false",
      success:function(result){
         alert(result);
      }
   });
}

結局のところ、これは ajax 関数呼び出しの後に行っていることです

于 2013-03-13T09:13:05.313 に答える
0

async を false にすることができます。

試す

function getStatusOfAdv(advID){
var Result;
$.ajax({
  url:baseURL+"/admin/advertisers/get.adv.status.php",
  data:"param="+escape(advID),
  dataType:"html",
  cache:"false",
  async:"false"
  success:function(result){

     Result=result;
  }
});
return Result;
}

ただし、async を false にすることはお勧めできません。

于 2013-03-13T09:24:40.433 に答える