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