Как получить значение из функции javascript, которая использует ajax

Я вызываю функцию, которая получает значение с помощью 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); } 

$.ajax() асинхронны, поэтому getStatusOfAdv() возвращается до завершения вызова ajax. Таким образом, вам придется реструктурировать свой код, чтобы весь код, использующий результат асинхронной функции, был либо в обработчике успеха ajax, либо вызван из этого обработчика.

Вы не можете выполнять синхронную функцию, например getStatusOfAdv() , использовать внутри нее асинхронный вызов, а затем возвращать значение при getStatusOfAdv() . Это невозможно сделать, потому что getStatusOfAdv() возвращается задолго до завершения асинхронного вызова ajax, поэтому возвращаемое значение еще не известно, когда оно возвращается.

Типичный шаблон дизайна в javascript – это выполнить работу, требующую ответа в функции обратного вызова, которая вызывается, когда выполняется операция async и доступны данные:

 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 } 

$.ajax – это async вызов, и функция 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) { } 

Попробуй это

  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 Call

вы можете сделать 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; } 

Но сделать асинхронный к ложному не является хорошей практикой.