Согласно документам
Функция $ .ajax () возвращает созданный ею объект XMLHttpRequest.
Любое возвращаемое значение, которое вы возвращаете из функции обратного вызова, игнорируется.
Вам необходимо поместить значение в переменную, определенную в более широкой области видимости, чем внутри функции обратного вызова (глобальной или предпочтительно внутри внешней функции).
var result;
$.ajax({
....
success : function(data) {
...
result = ...;
}
});
Или, что еще лучше: делайте все, что хотите с возвращаемым значением внутри функции обратного вызова success, это сохранит асинхронный характер вызова ajax и означает, что вам не нужно ждать возврата вызова.
Выполнение обработки в функции обратного вызова success означает, что вы знаете, что у вас есть результаты, если вы поместите значение в переменную, переменной может еще не быть присвоено значение к тому времени, когда вы захотите ее использовать.
В комментарии к другому ответу на этой странице вы говорите:
однако я вызываю функцию runAjax из множества других функций, а не только из той, что приведена в моем примере кода выше, поэтому мне нужно возвращаемое значение, а не функция runAjax, выполняющая замену html
Я бы добавил дополнительный параметр к вашей функции runAjax, которая является еще одной функцией обратного вызова, которую вы можете передавать в различные функции обработки из различных функций.
function runAjax(data_obj, callback) {
$.ajax({
...
success : function(data) {
...
result = ...
...
if ( typeof(callback) == "function") {
callback(result);
}
}
});
}
Тогда вы можете назвать это как
runAjax({method: method_set, id: id_set},
function(result){
alert(result);
}
);
Затем вы можете выполнять общую обработку данных в функции успеха, но пользовательскую обработку для каждого вызова в функции обратного вызова.
Если вам действительно нужно дождаться вызова, вы можете создать синхронный вызов ajax, передав опцию async:
$.ajax({
async:false,
....