Получить jqueryString из файлов json

0

Я хочу вернуть данные из $.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.

  • 0
    куда ты возвращаешься?
Теги:

3 ответа

0
Лучший ответ

Вызов сделан 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 завершен

0

Вы можете пойти на синхронный вызов, предложенный Филиппом Г.

Вы также можете работать с обратными вызовами (предпочтительное решение):

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);
});
0

Вы забываете, что это асинхронно. call функции возвращается до $.ajax вызова $.ajax или имеет возвращаемое значение. Вы не можете вернуть значение str в функции success потому что оно всегда будет выполнено после завершения вызова для call. Независимо от того, что вам нужно делать с str, либо сделайте это в самой функции success, либо сохраните ее где-нибудь в закрытии/глобальной области, чтобы какая-то другая функция могла работать с ней в другом месте.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню