У меня есть следующий код:понимания объекта возвращаемого асинхронного вызова
var bduplicate;
bduplicate = false;
bduplicate = check_for_duplicate_rule().done(function (result) {
console.log("result from check for duplicate" + result);
if(result == 'true') {
$('#validation_error').html("A similar rule already exists");
return result;
}
});
console.log(bduplicate);
if(bduplicate.success == 'true') {
console.log('im exiting');
return false; //exit this function
}
А вот определение самого метода асинхронного:
function check_for_duplicate_rule() {
var parameters = {
num: $('#num').val(),
condition: $('#condition').val(),
cdidnumber: $('#cdidnumber').val()
}
return $.getJSON(
url = aURLdefinedsomewhere,
parameters,
function (data) {
//if (data=='true') {
//$('#validation_error').html("A similar rule already exists");
//}
} //end data
); //end getJSON
}
Проблема:
Системы никогда входит в оператор IF, который выводит на консоль «im enter». Но он корректно меняет текст элемента validation_error. И он выводит на консоль следующее: результат проверки на наличие дубликата: true ". Это заставляет меня думать, что способ проверки результатов, хранящихся в bduplicate, неверен.
Что я пробовал так далеко:
Я включил следующую строку в коде:.
console.log (bduplicate);
, чтобы увидеть, что я получаю обратно консоль печатает Conte nts объекта и включает в себя множество различных свойств. Есть одно свойство «responseText», оно говорит responseText: «« true »↵« Может ли это быть проблемой? Хотя, если это так, это не объясняет, почему тест, чтобы установить элемент ошибки проверки, проходит.
В случае это помогает, сервер данных для Ajax вызова, как так:
return json.encode(true)
Вопросы:
В дополнение к попытке понять, почему я могу» t получить код для отображения результатов из команды console.log («im exiting»), мне также интересно, правильно ли я возвращаю данные json?
я где-то читал, что технически это должно выглядеть следующим образом:возвращение json.encode («успеха: истинный») Если это так, то как бы я проверить на истину в передней части?
Может ли кто-нибудь указать мне какую-либо документацию на объект, возвращаемый методом .done()? Я искал jQuery API, но ничего не нашел. Я, вероятно, не ищу правильные ключевые слова.
Спасибо.
bduplicate - отложенный объект, значение успеха не назначается до тех пор, пока не будет разрешено обещание. Вам нужно будет проверить «bduplicate.success» в рамках функции «done». Дополнительная информация: http://api.jquery.com/deferred.done/ – rtimoshenko
@ FabrícioMatté для первой части вопроса, я бы проголосовал, но не во второй части. –
@MattLo Правильно, также 'json.encode' (в Q1) скорее всего ошибочен, но я не могу сказать, что OP не упоминает, какой язык сервера используется. –