Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Изменить ответ сервера ajax (https://javascript.ru/forum/misc/56896-izmenit-otvet-servera-ajax.html)

gam0ra 08.07.2015 23:18

Изменить ответ сервера ajax
 
ВСем привет а как можно при помощи ajxa послать запрос и при получении ответа прежде чем ответ попадет в скрипт его изменить??:) :) :)

kostyanet 09.07.2015 05:40

Ажно три колобка нарисовали, так было смешно, да?

gam0ra 09.07.2015 14:14

kostyanet,
Вобщет это не смех а довольное лицо

KosBeg 09.07.2015 15:02

Цитата:

Сообщение от gam0ra
прежде чем ответ попадет в скрипт его изменить

тоесть ответ еще не пришел, а вам уже нужно его изменить? :D
чую я что-то плохое вы задумали ;)

KosBeg 09.07.2015 15:06

http://learn.javascript.ru/ajax-xmlhttprequest
// 1. Создаём новый объект XMLHttpRequest
var xhr = new XMLHttpRequest();

// 2. Конфигурируем его: GET-запрос на URL 'phones.json'
xhr.open('GET', 'phones.json', true);

// 3. Отсылаем запрос
xhr.send();

// 4. Если код ответа сервера не 200, то это ошибка
if (xhr.status != 200) {
  // обработать ошибку
  alert( xhr.status + ': ' + xhr.statusText ); // пример вывода: 404: Not Found
} else {
  // вывести результат
  alert( 'Пришел ответ: ' + xhr.responseText ); // responseText -- текст ответа.
}

Что имеется в ввиду
Цитата:

Сообщение от gam0ra
прежде чем ответ попадет в скрипт

?

kostyanet 09.07.2015 15:36

Цитата:

Сообщение от gam0ra
довольное лицо

От хорошей шутки. Типа пока заголовок с ответом по проволоке катится, встретить и потолковать с ним - чтобы поменялся пока дойдет до скрипта.

gam0ra 10.07.2015 13:56

KosBeg,
Цитата:

Что имеется в ввиду
А разве не так работает??как на схеме??
Сначало в браузер а браузер передает параметры в js

Да и кстати разрешаю эту схему вставлять в учебники и размещать у себя на сайтах!

KosBeg 10.07.2015 14:18

Цитата:

Сообщение от gam0ra
Да и кстати разрешаю эту схему вставлять в учебники и размещать у себя на сайтах!

хорошее у вас чувство юмора :D
Цитата:

Сообщение от gam0ra
Сначало в браузер а браузер передает параметры в js

ну так javascript’om и обработай =)

kostyanet 10.07.2015 21:25

Не так. Стрелка от улья с надписью SavaSecipt тоже идет сперва к браузеру, ибо от него мы кормимся объектом XMLHttpRequest.

Короче данные приходят - делайте с ними что угодно в скрипте. Других мест нету. Из этого скрипта передавайте в другой - все как обычно.

jackdempsey2015 10.07.2015 21:36

gam0ra,
То что ты нарисовал на схеме -- это ни о чем. *концептуально* у тебя есть 2 актора -- клиент и сервер, которые обмениваются сообщениями. javascript, браузер, сеть, компьютеры, etc -- это детали реализации, которые не должны тебя, в данном случае интересовать. Поэтому, схема проще: клиент <-текст-> сервер. В нашем случае, клиент -- это тот, кто всегда запрашивает, а сервер -- кто всегда отвечает. Что касается твоего вопроса, то, в ответ ajax попадает строка, и ты с этой строкой можешь делать все что угодно.

jackdempsey2015 10.07.2015 21:39

KosBeg,
Ваш пример не совсем корректен, по моему. Если получен статус 200, это еще не значит, что весь ответ получен. К тому же, асинхронный запрос, как в Вашем примере, требует определить коллбек onreadystatechange

KosBeg 10.07.2015 21:49

Цитата:

Сообщение от jackdempsey2015
Ваш пример не совсем корректен, по моему

пример не мой а из той ссылки, лично я если юзаю аякс, то использую не статус 200, а
status >= 200 && status < 400

jackdempsey2015 10.07.2015 22:00

Цитата:

Сообщение от KosBeg
не мой а из той ссылки

какая разница из какой он ссылки, привели то Вы его.
Цитата:

Сообщение от KosBeg
то использую не статус 200, а status >= 200 && status < 400

Это зачем?

kostyanet 11.07.2015 06:56

Это похоже на узоры. Чтоб код красивее был, орнамент такой.

Нет никакого смысла проверять статус, ибо из всех статусов вы получите только разрешенные, и разрешенные вам ничего не дадут, ибо ваши скрипты все равно заточены на проверку условленной переменной в ответе.

Ну хорошо, допустим

if(status==500)

сравните

if(responseText.lenght<1)

Теоретически в респонзе может что-то быть и нужно проверить 500, но где вы такое видели на практике?

Статусы редиректов вообще до скрипта не доходят.

kostyanet 11.07.2015 07:08

Передавайте все в json'е, несмотря на химерические рекомендации не передавать хтмл в жисоне. Выглядит бредово, зато работает:

try{
  var data=JSON.parse(this.responseText);
}
catch(e){
  /* do somethin */
}


если в ответе нет нормального формата жисона, значит либо он пустой, либо пришел с другого места, скажем с сообщения об ошибке, об отсутствии и тп.

Внутри катча можно захотеть получить уже статус и типа типа принять то или иное решение.

ЗЫ Еще раз. Если бы браузер без базаров пропускал все заголовки до скрипта - это была бы другая технология, настоящая и под нее можно было бы написать нормальные библиотеки. Но поскольку пропускается только часть - ради этой части не стоит и дрыгаться. Трай-кач на клиенте сделает все что требуется и без гемора со статусами.

jackdempsey2015 11.07.2015 09:18

Цитата:

Сообщение от kostyanet
на практике

На практике это обернется тем, что выведется только часть ответа, которая успела прийти, на момент обработки. Все просто.

KosBeg 11.07.2015 09:33

Цитата:

Сообщение от kostyanet
Выглядит бредово, зато работает

если все заслешить(как правильно сказать?) - очень даже работает =)
Цитата:

Сообщение от jackdempsey2015
выведется только часть ответа, которая успела прийти, на момент обработки

вы уверены?
var xhr = new XMLHttpRequest();

xhr.open('GET', 'phones.json', true);

xhr.send();

xhr.onreadystatechange = function() {
  if (xhr.readyState != 4) return; // эта штука не даст вывести часть ответа пока ответ полностью не загрузится =)

  alert( 'Пришел ответ: ' + xhr.responseText );

}

jackdempsey2015 11.07.2015 09:35

Цитата:

Сообщение от KosBeg
(xhr.readyState != 4)

Я про эту проверку как раз и говорю. Она является обязательной


Часовой пояс GMT +3, время: 05:09.