1

Судя по всему, вопрос возник вследствие недопонимания работы JavaScript, поэтому сильно не ругайте. Смысл следующий: делаю ajax запрос

var R = $.ajax({ <всякие там параметры> });

Когда я делаю console.log(R);, то вижу параметры объекта, в т.ч. responseText, в котором лежит правильное значение. Но когда пытаюсь получить значение вот так - console.log(R.responseText);, то получаю undefined. Аналогичная ситуация, при таком виде

var R = $.ajax({ <всякие там параметры> }).responseText;

console.log(R); - undefined. Если добавлять в параметр success: function(r) { console.log(r); };, то все отлично. Хотелось бы узнать, почему в первых случаях возвращается undefined.

Nicolas Chabanovsky
  • 51,426
  • 87
  • 267
  • 507
Redlust
  • 309
  • 1
    @Алексей Ткаченко, Чтобы отформатировать код, выделите его мышью и нажмите на кнопку 101010 редактора. – Oleg Mar 28 '12 at 17:53
  • Прошу прощения - привык уже js, в особенности используя jQuery, читать и писать одной строчкой. – Redlust Mar 30 '12 at 16:01
  • плохоя привычка – Spectre Mar 30 '12 at 16:08
  • responseText приходит параметром в функцию обработчик –  Mar 30 '12 at 16:11

2 Answers2

2
var g = $.post('/');
for(i in g) {
  console.log(i);
}

Результат

readyState
setRequestHeader
getAllResponseHeaders
getResponseHeader
overrideMimeType
abort
done
fail
progress
state
isResolved
isRejected
then
always
pipe
promise
success
error
complete
statusCode

Все эти параметры кроме readyState имеют тип function.


Посмотрите внимательно страницу документации jQuery.ajax() — где вы там увидели такое использование данного метода?

Oleg
  • 5,060
  • а где responseText ? Наверно он должен появиться при statuscode==4 (подзабыл уже статускоды аякса- сильно не пинайте). – ReinRaus Mar 28 '12 at 18:03
  • Непонятно это. – Oleg Mar 28 '12 at 18:04
2

А вы его (запрос) случайно не асинхронно отправляете? Мои познания в JS стремятся к нолю, но все же может быть в этом случае результат только в success-замыкание и подается? И вот еще нашел - второй ответ.

VioLet
  • 2,857
  • 14
  • 20
  • Запрос отправляю не асинхронно. Не могу понять, почему при логировании объекта он мне говорит, что у него есть значение resposeText, а при обращении - его нет. Собственно, в лучшем ответе по ссылке есть то, что я пытался делать и получал все тот же undefined – Redlust Mar 29 '12 at 09:23
  • Собственно, VioLet был прав(а). Еще раз внимательно проштудировал описание jQuery.ajax() и обнаружил, что по умолчанию запрос отправляется асинхронно. Собственно поэтому при обращении к св-ву объекта такового там пока что еще нет, т.к. js работает судя по всему быстрее моего канала или скрипта php. Выставление свойства async в false решило все мои проблемы.

    З.Ы. @exec, Блин, жалко репы нет - минусанул бы ответ. Если Вы ищете resposeText в методах, то вы заблуждаетесь :) И то, что выводится таким путем это начинка самого объекта ajax, а не того, что возвращается.

    – Redlust Mar 29 '12 at 10:14