Я хочу вернуть данные из $.ajax, но я не могу...
function call() {
var str = null;
$.ajax({ url: '/jsonFiles/Products.json',
datatype: 'json',
success: function (data) { alert(data); str = data; },
error: function () { alert("error"); }
});
return str; }
Я не получаю никакого результата. alert (data) может работать, тогда он возвращает str, это не удалось.. PLS я хочу функцию, которая возвращает JsonString.
Вызов сделан asynchronus witch означает, что функция вернется до завершения вызова $.ajax.
Это не рекомендуется, но я думаю, вы можете обойти его, передавая async: false как параметр, например.
$.ajax({ url: '/jsonFiles/Products.json',
datatype: 'json',
async: false,
success: function (data) { alert(data); str = data; },
error: function () { alert("error"); }
});
еще лучше решение делает другую функцию для вызова с str, когда $.ajax завершен
Вы можете пойти на синхронный вызов, предложенный Филиппом Г.
Вы также можете работать с обратными вызовами (предпочтительное решение):
function call(callback) {
$.ajax({ url: '/jsonFiles/Products.json',
datatype: 'json',
success: callback,
error: function () { alert("error"); }
});
}
// call call with a callback function (anonymous in this example)
call(function(data) {
alert(data);
});
Вы забываете, что это асинхронно. call
функции возвращается до $.ajax
вызова $.ajax
или имеет возвращаемое значение. Вы не можете вернуть значение str
в функции success
потому что оно всегда будет выполнено после завершения вызова для call
. Независимо от того, что вам нужно делать с str
, либо сделайте это в самой функции success
, либо сохраните ее где-нибудь в закрытии/глобальной области, чтобы какая-то другая функция могла работать с ней в другом месте.