Хорошо, я знаю, что такие вопросы, вероятно, были заданы десятки раз, но я не могу найти рабочего решения для своего проекта. Недавно, используя jQuery для многих вызовов AJAX, я оказался в форме обратного ад. Является ли jQuery слишком мощным для этого проекта, выходит за рамки этого вопроса. Так что в основном здесь некоторый код, который показывает, что происходит:Функция возвращает после XMLHttpRequest
function check_form(table)
{
var file = "/models/"+table+".json";
var errs = {};
var xhr = $.getJSON(file, function(json)
{
for (key in json)
{
var k = key;
var r = json[k];
$.extend(errs, check_item("#"+k,r));
}
});
return errs;
}
И ... как вы можете догадаться, я получаю пустой объект возвращается. Моя первоначальная идея состояла в том, чтобы использовать какую-то идею onReadyStateChange
, которая вернется всякий раз, когда readyState
, наконец, ударил 4. Это заставляет мое приложение зависать бесконечно. Мне нужны эти ошибки, чтобы решить, форма, разрешена ли или не подавать или нет (а также, чтобы сообщить пользователю, где ошибки в приложении. Есть идеи?
Edit. Это не самое красивое решение, но мне удалось заставить его работать. В принципе, check_form имеет json, переданный ему из другой функции, вместо того, чтобы загружать его. Я уже загружал его там, поэтому, наверное, лучше всего, что я не продолжаю загружать один и тот же файл снова и снова в любом случае. Я просто беспокоился о перегрузке памяти. Эти файлы не совсем огромны, поэтому, я думаю, это, наверное, хорошо.
Это будет работать, за исключением того, я абсолютно _должны_ в конце концов вернуть истинный или ложный обратно к проводнику представить. check_form вызывается другой функцией, которая возвращает 'return (countProps (errs) == 0)? true: false; 'ему нужно будет предоставить данные из этой функции, если только я просто ничего не пропущу. – ashays
Вы не можете этого сделать, потому что JavaScript управляется событиями по своей природе. Нет функций ожидания/ожидания, поэтому вы не можете приостановить текущий код. Вы должны попытаться переосмыслить логику. –
Хммм, я посмотрю, что я могу придумать, чтобы исправить это. Думаю, мне нужно вернуться к чертежной доске с другой идеей. Казалось, что эта работа так хорошо работает. :П – ashays