При отправке ajax запроса произошла ошибка funpay

jQuery.ajax()

При выполнении ajax-запроса, в заголовках (header) указываются допустимые типы содержимого, ожидаемого от сервера. Значения этих типов будут взяты из параметра accepts . Если требуется его изменить, лучше сделать это с помощью метода $.ajaxSetup().

async

По умолчанию: true

По умолчанию, все запросы отсылаются асинхронно (значение данного параметра true). Если же вам нужны синхронные запросы, то параметру async выставите значение false. Кроссдоменные запросы и dataType: «jsonp» не выполняются в синхронном режиме. Учтите, синхронные запросы могут на время выполнения запроса заблокировать браузер.

beforeSend(jqXHR jqXHR , объект settings)

Функция, которая будет вызвана непосредственно перед отправкой ajax-запроса на сервер. Она может быть использована для модификации jqXHR-объекта (в ранних версиях, до jQuery 1.4.x использовался XMLHttpRequest). Так же может использоваться для изменения заголовков (headers) и т.д. Объект типа jqXHR и объект настроек, передаются в качестве аргументов.

КАК ОБОЙТИ БЛОКИРОВКУ НА САЙТЕ FUNPAY ? ПОЛУЧИЛ БАН НА ФАНПЕЙ, ЧТО ДЕЛАТЬ ? РАЗБАН ФП АККАУНТА !

Возврат значения false в функции beforeSend вызовет отмену ajax-запроса. Начиная с jQuery 1.5, beforeSend сработает вне зависимости от типа запроса.

cache

По умолчанию: true, false для типов данных ‘script’ and ‘jsonp’

Если false, запрашиваемая страница не будет кэшироваться браузером.

complete( jqXHR jqXHR, строка textStatus)

Функция, которая будет вызвана после завершения ajax запроса (срабатывает после функций-обработчиков success и error). Функция принимает два аргумента: объект типа jqXHR (в ранних версиях, до jQuery 1.4.x использовался XMLHttpRequest) и строку, характеризующую статус запроса («success», «notmodified», «error», «timeout», «abort», или «parsererror»). Начиная с jQuery 1.5, complete может принимать массив функций.

contents

Параметр задается в формате и определяет, как jQuery будет разбирать ответ от сервера, в зависимости от его типа. (добалено в версии 1.5)

contentType

По умолчанию: ‘application/x-www-form-urlencoded; charset=UTF-8’

При отправке Ajax запроса, данные передаются в том виде, в котором указаны в данном параметре. По умолчанию используется ‘application/x-www-form-urlencoded; charset=UTF-8’. Если задать значение самим, то оно будет отправлено на сервер. Если кодировка не указана, то по умолчанию будет использоваться кодировка выставленная на сервере.

context

Объект, который станет контекстом после выполнения запроса (передаваемое значение в переменную this). Например, если указать в качестве контекста DOM-элемент, то все обработчики ajax-запроса тоже будут выполняться в контексте данного DOM-элемента. В данном примере ключевое слово this будет содержать document.body:

$.ajax( < url: «test.html», context: document.body, success: function()< $(this).addClass(«done»); >>);

converters

Определяет, с помощью каких функций будет производиться конвертация значений из одного типа, в другой. (добалено в версии 1.5)

😒 Бан на FunPay💩

crossDomain

По умолчанию: false для одного и того же домена, true для кроссбоменных запросов.

Если вы хотите, чтобы выполнить кросс-доменный запрос (например, JSONP) на том же домене, выставите true в настройке crossDomain. Это позволяет, например, сделать серверные перенаправление на другой домен. (добалено в версии 1.5)

data

Данные, которые будут переданы на сервер. Если данные не являются строкой, то они конвертируются в строку запроса. Для запросов типа GET данные прикрепляются к URL. Объект должен состоять из пар ключ/значение. Если в значении массив, то jQuery упорядочивает значения в зависимости от настройки traditional.

По умолчанию, например, превращается в foo=bar2.

dataFilter( строка data, строка type)

Функция, с помощью которой будут обрабатываться сырые данные типа XMLHttpRequest, полученные от сервера. Ваша функция должна играть роль фильтра и возвращать очищенную строку. В функцию передаются два параметра: полученные данные и значение параметра dataType.

dataType

По умолчанию: автоматически определяемая строка (xml, json, script, или html)

Тип данных, ожидаемых от сервера. Если опция не определена, то jQuery попытается определить тип, основываясь на MIME-типе ответа.

error( jqXHR jqXHR, строка textStatus, строка errorThrown)

Функция, исполняемая в случае неудачного запроса. Принимает 3 аргумента: объект jqXHR (в прошлом XMLHttpRequest), строку с описанием ошибки, а так же строку исключения, если оно было выбрашено. Второй аргумент может содержать следующие значения: null, «timeout», «error», «abort», и «parsererror». В случае если происходит HTTP ошибка, то в третий аргумент будет записан её текстовой статус.

К примеру, «Not Found» или «Internal Server Error.». Начиная с jQuery 1.5, вместо одной функции, этот параметр может принимать массив функций. Событие error не происходит при dataType равному script или JSONP.

global

По умолчанию: true.

Вызывать или нет глобальные обработчики событий Ajax для этого запроса (например ajaxStart или ajaxStop).

headers

По умолчанию: <>

Здесь можно указать дополнительные заголовки запроса (header). Значения этой настройки будут введены до вызова функции beforeSend, в которой могут быть внесены окончательные изменения в заголовки. (добалено в версии 1.5)

ifModified

По умолчанию: false

Запрос будет считаться успешным только в случае, если данные ответа изменились со времени последнего запроса. Проверка осуществляется по заголовку Last-Modified. По умолчани, данная опция отключена. В jQuery 1.4 так же проверяется значение ‘etag’, для отслеживания факта изменения данных.

isLocal

По умолчанию: в зависимости от текущей локации

Параметр определяет, запущена ли веб-страница локально (например по протоколу file, *-extension, и widget) или нет (например по протоколу http). Данную настройку лучше менять с помощью метода $.ajaxSetup(). (добалено в версии 1.5)

jsonp

Определяет имя параметра, который добавляется в url JSONP-запроса(по умолчанию, используется «callback»). К примеру настройка преобразуется в часть url строки ‘onJSONPLoad=?’. Начиная с версии 1.5, указание в этом параметре false предотвращает добавление в url дополнительного параметра. В этом случае, необходимо установить значение настройки jsonpCallback. Например так: .

jsonpCallback

Функция, которая будет вызвана при ответе сервера на запрос типа JSONP. По умолчанию, jQuery генерирует произвольное уникальное имя этой функции, что более предпочтительно. Если вы хотите использовать кэширование GET запросов, то вписывайте название функции сами. Начиная с версии 1.5 можно указать функцию, для того, чтобы обработать ответ сервера самостоятельно.

mimeType

Здесь можно указать тип данных, в котором ожидается ответ от сервера вместо XHR. (добалено в версии 1.5.1)

password

Пароль, который будет использоваться в ответ на запрос проверки подлинности доступа HTTP (если это требуется)

username

Имя пользователя, которое будет использоваться в ответ на запрос проверки подлинности доступа HTTP (если это требуется)

processData

По умолчанию: true;

По умолчанию передаваемые на сервер данные преобразуются из объекта в строку запроса и отправляются как «application/x-www-form-urlencoded». Если вам необходимо отправить DOM-документ или иные данные, которые нельзя подвергать конвертированию установите опцию processData в false.

scriptCharset

Применяется только для Ajax GET-запросов типов ‘JSONP’ и ‘script ‘. Если сервер на стороннем домене использует кодировку, отличную от вашей, необходимо указать кодировку стороннего сервера.

statusCode

Набор пар, в котором кодам выполнения запроса сопоставляются функции, которые при этом будет вызваны. Например, для кода 404 (страницы не существуют) можно сделать вывод сообщения на экран:

$.ajax( < statusCode:< 404:function()< alert(‘Страница не найдена’); >> >);

Если запрос прошёл успешно, то в качестве параметра, анонимная функция будет принимать те же параметры, что и при success. При ошибке, будет принимать то же самое что и при функции-обработчике error. (добалено в версии 1.5)

success( объект data, строка textStatus, объект jqXHR)

Функция, которая будет вызвана в случае успешного завершения запроса. Принимает 3 аргумента — данные (data), присланные сервером и прошедшие предварительную обработку; строка со статусом выполнения (textStatus); объект jqXHR (в версиях до 1.5 вместо jqXHR используетсяXMLHttpRequest). С версии jQuery 1.5, вместо одной функции, этот параметр может принимать массив функций.

timeout

Время ожидания ответа от сервера в миллисекундах. Переписывает глобальную настройку этого же параметра в $.ajaxSetup(). Если это время будет превышено, запрос будет завершен с ошибкой и произойдет событие error, которое будет иметь статус «timeout».

traditional

По умолчанию: false

Установите значение этого параметра в true, для того, чтобы использовать традиционный стиль сериализации.

type

По умолчанию: GET

Определяет тип запроса GET или POST. Можно также использовать другие HTTP-запросы (такие как PUT или DELETE), но следует помнить, что они поддерживаются не всеми бразерами.

url

По умолчанию: текущая страница.

Страница, накоторую будет отправлен запрос.

xhr

По умолчанию ActiveXObject в IE, XMLHttpRequest в других браузерах.

Callback-функция, для создания объекта XMLHttpRequest. Создав свою функцию, вы берёте на себя всю ответственность за формирование объекта.

xhrFields

Объект вида для изменения значений соответствующих полей объекта XMLHttpRequest.

$.ajax( < url: a_cross_domain_url, xhrFields: < withCredentials: true >>);

(добалено в версии 1.5.1)

Примеры

Сохранить данные на сервере и оповестить об этом пользователя.

$.ajax( < type: «POST», url: «some.php», data: < name: «John», location: «Boston» >>).done(function( msg ) < alert( «Data Saved: » + msg ); >);

Получить последнюю версию HTML страницы

$.ajax(< url: «test.html», cache: false >).done(function( html ) < $(«#results»).append(html); >);

Передаём в качестве данных XML документ. Отключаем автоматическую конвертацию данных в обычную строку, задав настройке processData значение false :

var xmlDocument = [create xml document]; var xmlRequest = $.ajax(< url: «page.php», processData: false, data: xmlDocument >); xmlRequest.done(handleResponse);

Отправить на сервер значение ID. Сохранить данные, оповестить пользователя. Если запрос не прошёл, сообщить об этом пользователю.

var menuId = $(«ul.nav»).first().attr(«id»); var request = $.ajax(< url: «script.php», type: «POST», data: , dataType: «html» >); request.done(function(msg) < $(«#log»).html( msg ); >); request.fail(function(jqXHR, textStatus) < alert( «Request failed: » + textStatus ); >);

Загрузить и выполнить файл JavaScript:

$.ajax(< type: «GET», url: «test.js», dataType: «script» >);

Источник: ruseller.com

Я хотел бы поймать ошибку и показать соответствующее сообщение, если запрос Ajax терпит неудачу.

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

function getAjaxData(id) < $.post(«status.ajax.php», , function(data)< var tab1; if (data.length>0) < tab1 = data; >else < tab1 = «Error in Ajax»; >return tab1; >); >

я узнал, что» ошибка в Ajax » никогда не выполняется, когда запрос Ajax не удался.

Как я могу обработать ошибку Ajax и показать соответствующее сообщение, если это не удастся?

автор: Peter Mortensen

6 ответов

начиная с jQuery 1.5 вы можете использовать механизм отложенных объектов:

$.post(‘some.php’, ) .done(function(msg)< >) .fail(function(xhr, status, error) < // error handling >);

другой способ-использовать .ajax :

$.ajax(< type: «POST», url: «some.php», data: «name=John, success: function(msg)< alert( «Data Saved: » + msg ); >, error: function(XMLHttpRequest, textStatus, errorThrown) < alert(«some error»); >>);
автор: choise

jQuery 1.5 добавил отложенные объекты, которые прекрасно справляются с этим. Просто позвоните $.post и прикрепите любые обработчики, которые вы хотите после вызова. Отложенные объекты даже позволяют присоединить несколько обработчиков успеха и ошибок.

$.post(‘status.ajax.php’, ) .done( function(msg) < . >) .fail( function(xhr, textStatus, errorThrown) < alert(xhr.responseText); >);

до jQuery 1.8 функция done называлась success и fail называлась error .

автор: Michael Venable

$.ajax(< type: ‘POST’, url: ‘status.ajax.php’, data: < deviceId: id >, success: function(data)< // your code from above >, error: function(xhr, textStatus, error) < console.log(xhr.statusText); console.log(textStatus); console.log(error); >>);
автор: jAndy
$.post(‘someUri’, < >, function(data)< doSomeStuff >) .fail(function(error) < alert(error.responseJSON) >);
автор: marknery

всякий раз, когда запрос Ajax завершается с ошибкой jQuery запускает событие ajaxError. Все обработчики которые были зарегистрированы в .метод ajaxError() выполняется при эта пора.

$(‘.log’).ajaxError(function() < $(this).text(‘Triggered ajaxError handler.’); >);

Я бы предложил чтение ajaxError документация. Он делает больше чем просто use-case продемонстрированный выше-главным образом свое обратный вызов принимает ряд параметров:

$(‘.log’).ajaxError(function(e, xhr, settings, exception) < if (settings.url == ‘ajax/missing.html’) < $(this).text(‘Triggered ajaxError handler.’); >>);
автор: karim79

я исправил эту проблему путем объявления datatype: ‘json’ в моем вызове jQuery ajax.

Источник: askdev.ru

AJAX запрос. Почему срабатывает функция ошибки?

Почему не срабатывает Ajax запрос?
Добрый день! Не пойму почему не срабатыват запрос. <form method=»POST».

Не срабатывает ajax запрос
По нажатию на кнопку нужно обновить содержимое блока: <div onClick=»taskreload();.

не срабатывает Ajax запрос
Пытаюсь сделать следущее: с помощю PHP взять некую информацию с сайта. Т.е. есть поле ввода, ввожу.

Ajax: почему не срабатывает состояние success?
Приветствую всех! Помогите понять почему не срабатывает состояние success! Есть код //.

810 / 481 / 108
Регистрация: 28.05.2012
Сообщений: 1,518
Записей в блоге: 2

ну так может в самом articlejs.php какие-то ошибки? в результате ответ не приходит от сервера и ajax обрбатывает запрос как ошибку.

Регистрация: 04.06.2013
Сообщений: 1,532

ну так может в самом articlejs.php какие-то ошибки? в результате ответ не приходит от сервера и ajax обрбатывает запрос как ошибку.

Сервер отвечает

echo «»rez»: «Успешно»>»;
810 / 481 / 108
Регистрация: 28.05.2012
Сообщений: 1,518
Записей в блоге: 2

посмотрите через хром ответ сервера: правой клавишей «просмотреть код элемента» и далее вкладка Network, после это сделайте действие которое вызывает ваш ajax запрос

и если вы отправляете в формате json, то надо получать его так:

alert(data.rez);
Регистрация: 04.06.2013
Сообщений: 1,532

посмотрите через хром ответ сервера: правой клавишей «просмотреть код элемента» и далее вкладка Network, после это сделайте действие которое вызывает ваш ajax запрос

Что странно что type text/html

810 / 481 / 108
Регистрация: 28.05.2012
Сообщений: 1,518
Записей в блоге: 2
ну все пришло. значит должно работать. Что пишется в алерте?

Регистрация: 04.06.2013
Сообщений: 1,532

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
$(‘#button_save’).click(function() { var text = $(‘#text’).

val(); $.ajax({type:»POST», dataType:»json», url:»articlejs.php», data:{text:text,a:a}, success: function (data) { $(‘#text’).val(»); alert(data.

rez); }, error: function(XMLHttpRequest, textStatus, errorThrown) { $(‘#text’).val(‘ERROR’+ XMLHttpRequest +» «+ errorThrown) alert(textStatus);}, }); });
сделал как Вы сказали но функция ошибки по прежнему срабатывает

810 / 481 / 108
Регистрация: 28.05.2012
Сообщений: 1,518
Записей в блоге: 2

Что пишется в алерте?

и также посмотрите через браузер что пришло от сервера (кликните по articlejs.php)

Регистрация: 04.06.2013
Сообщений: 1,532
Что пишется в алерте?
Алерт «ошибки»
и также посмотрите через браузер что пришло от сервера (кликните по articlejs.php)
901 / 833 / 198
Регистрация: 28.06.2012
Сообщений: 1,607
Записей в блоге: 4

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
$(‘#button_save’).click(function() { var text = $(‘#text’).val(); $.ajax({type:»POST», dataType:»json», url:»articlejs.php», data:{text:text,a:a}, success: function (data) { $(‘#text’).val(»); alert(data.rez); }, error: function(XMLHttpRequest, textStatus, errorThrown) { $(‘#text’).val(‘ERROR’+ XMLHttpRequest +» «+ errorThrown) alert(textStatus);}, }); });
В строке 5 — что за а? Выдаёт синтаксическую ошибку и не число и не строка
$(‘#text’).val(‘ERROR’+ XMLHttpRequest +» «+ errorThrown)

XMLHttpRequest — это объект, зачем помещать его val ?

1 2 3
$res[‘rez’]=»успешно»; echo json_encode($res);?>
Всё работает.
Регистрация: 04.06.2013
Сообщений: 1,532
В строке 5 — что за а?
var a = location.search;
XMLHttpRequest — это объект, зачем помещать его val ?
Просто такЯ же только учусь
901 / 833 / 198
Регистрация: 28.06.2012
Сообщений: 1,607
Записей в блоге: 4
Почему не делаете как Вам говорят, а упорно гнёте свою линию
Делайте вот так
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
html> head> title>ajaxError/title> meta http-equiv=»Content-Type» content=»text/html; charset=windows-utf-8″ /> script src=»http://code.jquery.com/jquery-latest.js»>/script> script type=»text/javascript»> $(document).ready(function()< $(‘#button_save’).click(function() < var text = $(‘#text’).val(); $.ajax(, success: function (data) < $(‘#text’).val(»); alert(data.rez); >, error: function(XMLHttpRequest, textStatus, errorThrown) < $(‘#text’).val(‘ERROR = ‘+ errorThrown); alert(textStatus); >>); >); >);/*end ready*/ /script> /head> body > input type=»text» id=»text» size=»40″ value=»748″ > input type=»button» value=»Отправка» id=»button_save»> /body> /html>
articlejs.php
1 2 3
$res[‘rez’]=»успешно»; echo json_encode($res);?>
Регистрация: 04.06.2013
Сообщений: 1,532

Зачем a в кавычках.

Добавлено через 3 минуты

Почему не делаете как Вам говорят, а упорно гнёте свою линию

А Вы объясните где ошибка в моем коде, а потом уже предлагайте свой. Моя ошибка мне более интересна. Тем более что у Вас то же скорее всего ошибка

alert(data.rez);
Не работает
901 / 833 / 198
Регистрация: 28.06.2012
Сообщений: 1,607
Записей в блоге: 4
В том коде, что Вы выложили, нет изначально
var a = location.search;

Чтобы небыло ошибки я передаю букву ‘a’ — это, в данном случае не суть важно, данные всё равно не обрабатываются в articlejs.php

Регистрация: 04.06.2013
Сообщений: 1,532
В том коде, что Вы выложили, нет изначально

Просто думал что это не столь важно

данные всё равно не обрабатываются в articlejs.php

Они обрабатываются и записываются в базу данных на сервере(articlejs.php я тоже не весь код выложил) только вот что то с ajaxом наверно

901 / 833 / 198
Регистрация: 28.06.2012
Сообщений: 1,607
Записей в блоге: 4
alert(data.rez);
Не работает
Работает
Перейдите по ссылке
в примере PHP такой

1 2 3
$res[‘rez’]=»успешно»; echo json_encode($res);?>
Вот тоже самое, но PHP уже такой:
echo «»rez»: «Успешно»>»;?>
А Вы объясните где ошибка в моем коде,
Так объяснили вроде
Регистрация: 04.06.2013
Сообщений: 1,532

И вы хотите сказать что проблемы из за ответа сервера?

Добавлено через 11 минут

Вот тоже самое, но PHP уже такой:
Код PHP
1
2
echo «»;?>
если PHP такое то нужно добавить обработчик который разберет строку JSON например JSON.parse()
Регистрация: 04.06.2013
Сообщений: 1,532
Вот весь PHP. МОжет это как то поможет

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
header(‘content-type: application/x-javascript; charset=utf-8′); if (((isset($_COOKIE[’email’]) and isset($_COOKIE[‘password’])) or (isset($_SESSION[‘password’]) and isset($_SESSION[’email’]))) and isset($_POST[‘a’])) { include(«baza/baza1.php»); $q=$_POST[‘a’]; $a = strlen($q); $b = $a -3; $qsu = substr($q, -$b, $b); $emailc = $_COOKIE[’email’]; $passwordc=$_COOKIE[‘password’]; $emails = $_SESSION[’email’]; $passwords = $_SESSION[‘password’]; $rezult = mysql_query(«SELECT id FROM noteusers WHERE email=’$emailc’ AND password=’$passwordc’ OR email=’$emails’ AND password=’$passwords’»,$db); $myrow = mysql_fetch_array($rezult); $id = $myrow[‘id’]; //добавить коментрий if (isset($_POST[‘text’]) and isset($_POST[‘a’])) { $text=$_POST[‘text’]; $rezultatv = mysql_query(«INSERT INTO commentsartcles (autor,articleid,text) VALUES (‘$id’,$qsu,’$text’)»); echo json_encode(array(‘rez’=>’done’)); exit(); } //голосовать за стаью if (isset($_POST[‘param’])) { $param=$_POST[‘param’]; $rezultat = mysql_query(«INSERT INTO votearticles (articlesid,user,vote) VALUES ($qsu,’$id’,’$param’)»); } } ?>
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Почему не срабатывает функция
у меня в одном файле на удаление много много функция.. одна из них должна удалять собщения функция.

Почему не срабатывает функция .next()?
Всем привет, помогите понять, чего не срабатывает жКверивская функция .next() window.setPercents.

Почему не срабатывает функция TRIM?
Добрый день! Есть запрос, в котором происходит запись в курсор айдишника(work_id) и значения.

Почему не срабатывает SQL запрос в VBA?
Уже второй час сижу с ним — не могу понять проблемы. Смотрите: var = Me.ИД_Пользователя Set rst.

Источник: www.cyberforum.ru

Ошибка при отправке ajax-запроса

Мое первое беспокойство, могу ли я отправить более одного предложения о местоположении?
второй
Во-вторых, почему ошибка в этой конкретной строке?

Заранее спасибо за помощь.

Решение

Вы объявляете свои переменные правильно. Var — это языковая конструкция, которая объявляет следующее как переменную. Либо измените код, чтобы использовать точки с запятой в конце каждого оператора var следующим образом:

var value_0 = $(‘input[name=nome]’).val(); var value_1 = $(‘input[name=email]’).val();

или удалите все, кроме первого оператора var, следующим образом:

var value_0 = $(‘input[name=nome]’).val(), value_1 = $(‘input[name=email]’).val(), value_2 = $(‘input[name=contacto]’).val();

Другие решения

Других решений пока нет …

Источник: web-answers.ru

jQuery Ajax — события успеха и ошибки

Использовать будем $.ajax(), перед тем как писать скрипт, не забываем подключать jQuery.
Основа нашего скрипта будет выглядеть так:

$(‘.price-table’).on(‘click’, ‘.btn-item-add’, function()< $.ajax(<>); return false; >);

В данном коде мы видим, что по клику на кнопку с классом .btn-item-add, у которой кстати должен быть родитель с классом .price-table, мы вызываем аякс (пока что безе параметров для более простого понимания). return false — дописываем на случай если наша кнопка сделана через тег .

Теперь добавим события и базовые параметры:

//AJAX ADD TO CART $(‘.price-table’).on(‘click’, ‘.btn-item-add’, function()< var $id = $(this).data(‘id’), $thisBut = $(this), $count = $(this).prev(‘.quant-block’).find(‘.pr-item-quant’).val(); $.ajax(< url: ‘/include/ajax_cart.php’, type: ‘get’, cache: false, data: ‘id=’+$id+’).done(function(data)< //смотрим какой ответ отправляется в случае успеха console.log(data); >).complete(function()< // после того как аякс выполнился >).error(function()< // пишем ошибку в консоль если что-то пошло не так console.log(‘There was an error’); >); return false; >);

В самом начале добавились параметры, а для аякса прописали параметры: url, type, cache и data. Обратите внимание что мы передаем параметры, а в PHP $_GET в дальнейшем можно их обработать. Ссылку указываем относительно корня сайта.

Для примера у нас есть 3 jQuery события — done, complete и error. Отличие done от complete лишь в том что done вызывается первым. Таким образом мы можем в первой функции выполнить запрос, а во второй делать что душе угодно .

Как вызвать 2 аякса подряд при помощи jQuery

Рассмотрим код посложнее. По клику у нас появляется прелоадер по середине экрана.

//AJAX ADD TO CART $(‘.price-table’).on(‘click’, ‘.btn-item-add’, function() ‘); var $id = $(this).data(‘id’), $thisBut = $(this), $count = $(this).prev(‘.quant-block’).find(‘.pr-item-quant’).val(); $.ajax(< url: ‘/include/ajax_cart.php’, type: ‘get’, cache: false, data: ‘id=’+$id+’).done(function(data)< $(‘#bid4’).html(data); >).complete(function()< $.ajax(< url: ‘/include/ajax_cart_big.php’, type: ‘get’, cache: false, data: false, >).done(function(data)< $(‘#bid2’).html(data); >); $(‘.ajax-preload’).remove(); $(‘body’).append(‘Товар добавлен в корзину’); $(‘.tooltip’).animate(< top: ’20px’ >, 1500).fadeOut(1500); >).error(function()< console.log(‘There was an error’); >); return false; >);

Затем наши знакомые параметры ($id, $thisBut, $count). В функции .complete записываем вызов еще одного ajax запроса. Также убираем наш прелоадер. Таким образом можно выиграть немного времени при загрузке данных.

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

UPDATE 23.10.2018

Как передать файл через ajax:

Источник: forwww.com

Также сообщения о сбоях есть в городах:
Королёв, Московская область; Тайга, Кузба́сс.

Подсказки? Разочарования? Обсуждаем проблемы сервиса с другими посетителями сайта:

идентификация не требуется

комментарии с нецензурной лексикой и оскорблениями удаляются

Гость

  

2 дней назад

 #

28 января 2023

+
0





поддержка не работает, на почту не отвечают

ninelight

  

29 дней назад

 #

1 января 2023

+
1

Инфа об оплате лежит :D

01100100

  

48 дней назад

 #

13 декабря 2022

+
0

хост лежит

H3MARSHAL

  

82 дней назад

 #

9 ноября 2022

+
1

Сайт кидают

Устал писать в подержку, слышу одно и тоже уже какой раз и уже 10 раз вывожу денег вечная блокировка и проблема. Мне с клиентов никто не пишет что что-то случилось а в поддержке говорят свяжитесь с ним. Хотя аккаунт заблокирован достала эта площадка уже ей богу!

dickdog

  

83 дней назад

 #

8 ноября 2022

+
0

ну всё парни, сайт лег

Anab0l1zM

  

+
0

Сайт кидают

За 10 минут до вывода меня заблокировали, какие то схожие действия с другим аккаунтом типа. Что за бред у них часто такое бывает? Или просто не дают вывести денег специально? Кидают?

***

  

+
0

до сих пор не работает


  

+
1

Поддержка оффнулась? Они решили не отвечать вообще?

Э ***

  

+
0

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

Крутой

  

+
0

ТГ Премиум кому надо за 60% от оф цены пишите https://t.me/Timofey_games

fksleo

  

+
0

Э *** крч у тебя продолжится покупка когда восстановят сайт ну либо вернут деньги не переживай ну либо тебе чел товар отдаст

Крутой

  

+
0

5 минут проработал

ыы

  

+
0

прошло 7 минут и оно снова упало

fksleo

  

+
0

все ок будт как сайт откроют

JrPahom

  

+
0

опять лёг

Э ***

  

+
0

я оплатила товар, списались деньги, сайт накрылся. Деньги не вернули на балансе из тоже нет. Что делать?

велик

  

+
0

y1 а ты случаем не прайм продаешь?

КОКО ДЖАМБА

  

+
0

РОБИт

у1

  

+
0

Бл у меня там клиент товар ждет а вы тут со своими серверами,купите нормальные сервера заколебали

КОКО ДЖАМБА

  

+
0

КРУТО ЧТО СЛЁГ!!!!!

JrPahom

  

+
0

парни,кручу души для mk x-JrPahom

Пень

  

+
0

Сколько не будет работать еще?

велик

  

+
0

такая же фигня только прайм собирался забирать и лег полтора часа уже

Кукуся

  

+
0

Пздц как вовремя мне только должны были оплатить товар

******

  

+
0

Але, мне тут клиентов искать надо вы чооооу

Гоблин

  

+
0

блЪя , он вообще сегодня встанет ? у меня товар завись

Кабарга

  

+
0

Опять лег

упцп

  

+
0

опять лег спяять

Бот

  

+
0

Ну такое. Он опять упал

афпуыкп

  

+
0

он работает починили

велик

  

+
0

и долго он еще будет,кто нибудь знает?

дада

  

+
0

в тг, где осуждают фанпей мой ник, я инициатор

Ку ку

  

+
0

Я ток взял тик ток страницу и лег сайт …

Я в шоке

  

+
0

У вас тоже слетел сайт ?

Пустк

  

+
0

Блин,его же восстановят,да?

Не влад

  

+
0

у меня на счету 121к я еще не вывел всё норм будет?

Влад

  

+
0

У меня на щету моного денег, еще не вывел) фан пей ты где?

Волос с головы негрс

  

+
0

Загуглила ниче не поняла ушла спать.

Пупс

  

+
0

Ребят, поддержка есть, будут проблемы — пишите. Не переживайте.

Пупс

  

+
0

Капец, опять началось

Инжирка

  

+
0

на сколько фанпей ложится?

понимаю

  

+
0

Ребят мне парень оплатил заказ и в этот момент лёг сервер увидеть платёж я не успел скажи всё норм будет ?

fksleo

  

+
0

кря чя синапс покупал но челик мне не успел выдать ключ от него хотя я уже оплатил шо делать? ввсе ок будет?

.

  

+
0

а с оплатой всё норм будет?

эммм

  

+
0

опять лег поспать

дада

  

+
0

Создаем тг, где коллективно срем фанпей за такое.

sosiski

  

+
0

Кому нужен был скрипт на кристаликс, отпиши мне noxBasic#6851

uran

  

+
0

**** ток оплятил и сразу вылет

пайтон

  

+
0

опять лег на спать

.

  

+
-1

и опять 3 часа ждать *******


  

+
0

бл два раза в день слетел уже

Гость

  

+
0





Сбои

дада

  

+
-1

я уже задолбалась если честно.

Писец

  

+
0

Оплатил и тут же вылет, мдаааааааа

Небритая подмышка

  

+
-1

*******, раз в неделю фанпей лежит

дада

  

+
0

у меня тоже самое после оплаты

дада

  

+
0

Опять слетел, как только оплатила, сразу же ошибка…

блиииииин

  

+
0

опяяяяяяяяяять накрылся да вы издеваетесь ток оплатил

Александр

  

+
0

Открылся только-что

Емелка

  

+
0

Да, есть такая проблема, мы над ней работаем, в скором времени все наладится.
Ответ от поддержки

Nataliii

  

+
0

впервые сталкиваюсь с таким падением сайта ФП, надеюсь восстановят

Аромзон

  

+
1

Салям алеку.
Нипанимаю пашиму сайт ниработает? абьясните пажалуста. Ниужели админы спайс купили и курит начали?

DungeonMaster

  

+
0

Я мажу жопу вазелином!!!

Blya

  

+
0

Скажите Funpay выведет деньги если он не работает или как только заработает выведет?

Александр

  

+
0

Лежит
Bad gateway Error code 502

LOX

  

+
0

Сайт спит уже 3 часа

косово не существует

  

+
0

сайт спит уже более часа

CasukeЛоХоткатер

  

+
0

Сегодня выходной и никто его делать не будет . Отдохните

тифик

  

+
0

сайт лёг на часов 5 примерно будет восстановлен к 15-23 по мск это только предположение

Гость

  

+
0





Отлично

алекс

  

+
0

не работает

Ирк

  

+
0

заработало вроде..

НетОткаткрам

  

+
0

Кина три к будет , идем в Zelenka.guru

Гость

  

+
0





почему сегодня сбой? мне срочно нужно купить на фанпее штуку в игре из за которой я буду в плюсе НО ВЫ НЕ РАБОТАЕТЕ

Генг

  

+
-1

Важно!

Ребят, все деньги, которые стояли на выводе — придут, не волнуйтесь, этот сбой на пару часов, к вечеру всë должно работать, как минимум в прошлый раза всё было именно так.

ОПАРЫШОБЫКНОВЕННЫЙ

  

+
0

ПАЧИНИТИ

s1zlukaaa

  

+
0

Воу, ну что за дела, ребят, почему опять фп прилёг? :(

Ahseqq

  

+
0

Я и так заказ жду уже часов 20))) а тут и сайт отвалился

лох

  

+
0

Вадимикс тут?)

Срочно !!!

  

+
0

Транцы на Тик ток есть у кого ?
(Тематика спорт )

Куплю Тт страницу

  

+
0

На как долго сайт перестает работать ?

Westafy

  

+
0

Деньги не пропадут с вывода?

durkaFunpay

  

+
0

Что с сайтом

gtxfkm

  

+
0

на сколько он ложился в прошлый раз?

продавец 228

  

+
0

у кого сколько отзывов на фанпец?

кен6ен

  

+
0

у вас до сих пор не заходит?

Xer

  

+
0

Опять накрылся

РУслаНИТа

  

+
0

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

хуцй

  

+
0

а шо перестали писать?

печаль

  

+
0

все утро сегодня ждал продавца=дождался и тут сайт упал

vit

  

+
0

На сайт вообще не заходит

ромбик

  

+
0

отвал отвал отвал капец ну блин

жопа

  

+
0

упал, клиент только по поводу буста написал пизхец…

qwerty

  

+
0

а на долго он обычно падает?

Rnd

  

+
0

Мало того, что конченные продавцы тупили по пол часа, так теперь еще и фп лег спать, что за день

челеен

  

+
-1

у меня только что купили товар я не успел его выдать

01100100

  

+
0

снова отвалился(

Burn

  

+
0

Чё опять сервера сдохли, продавец должен вещь отправить а я бабки ему. Ну походу он остался без денег XD

куе

  

+
0

я только купил, продавец не успел ничего сделать и сайт сдох

gapk

  

+
0

У всех перестал работать сайт?

Скачать обои клещ рояль

  

+
0

Оплата не работает

дарк

  

+
0

о встал сервак

BigDick

  

+
0

снова эти анонимусы с калькулятора с фанпея нашу наличку снимают, эхх

дарк

  

+
0

-кошелек на 7к рублей юхуу

Киросин

  

+
0

опять упал сервак

андранойд

  

+
0

работает

Arkasha911

  

+
0

Запустили Фанпей!! УРААА

BigBob

  

+
0

ураа кошелек на 50к уходит в фонд малоимущим тиграм Таджикистана, юххуууууу

Arkasha911

  

+
0

Начало месяцы, взносы за донат, Голд пассы, куча покупок.. вот и не выдержал бедняжка

Убивец нигг

  

+
0

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

Кот

  

+
0

Ждем пока исправят

Ulsk

  

+
1

biglox мастерски пользуешься командами Ctrl+C Ctrl+V

Ксерокс

  

+
0

Мне инет оплачивать сегодня, деньги с фанпея не успел вывести, спасибо ***** теперь все бабки на фанпее лежат

biglox

  

+
0

Добрый день, уважаемые пользователи сайта FunPay.com! В связи с неоплатой хостинга нашим владельцем-********* мы вынуждены ожидать пока его отпустит от очередного прихода от спайса. После долгого бэдтрипа под двумя проститутками он обязательно возьмёт трубку и услышит порцию нецензурной брани от нас. Просим сохранять спокойствие и не поддаваться панике. Деньги за активные заказы перейдут в фонд поддержки малоимущим тиграм в Таджикистане.
С уважением техническая поддержка сайта FunPay.

KAMAZ

  

+
0

не робит также

Скам

  

+
0

А как насчёт вывода, т.к у меня задержка стоит на вывод за 15 мин до вывода средств лег сайт, это круто, интересно бл шо будет?)

твердый понос

  

+
0

хост

Ulsk

  

+
0

biglox лучше напиши когда не будет вроде

лох

  

+
0

а че с ним ?
ддос или хостинг не оплатил?

01100100

  

+
0

Интересно а что с ним? Почему так? и как часто такое бывает у фанпея?

01100100

  

+
0

да не починился он , просто иногда вроде как пропускает но тут же стопится

biglox

  

+
1

все заработал вроде

Ulsk

  

+
0

Все, прикрыли лавку

KAMAZ

  

+
0

на сам сайт заходит, а на товар нет

твердый понос

  

+
0

не работает, а я товар покупал и оплатил уже!!

Бебра слава

  

+
0

Заходите починилсч фанпей

LOX

  

+
0

ПОЧТИ ЗАШЕЛ НУУУУУУУУ ПОДНАЖМИТЕ

LOX

  

+
0

покупаю адену на эльморлаб с1

Страж

  

+
0

Вадя включи фанпей

DENIKLO

  

+
0

пи..ец он лег во время сделки на 1500 и че делать?!!!

продавец платины из Ровно

  

+
0

Отличная площадка, жаль хост подводит иногда.

M1ke

  

+
0

funpay опять лег лол))

L3onTv

  

+
0

Писец, фаник лёг во время сделки на 100рубасов(

Мороз

  

+
0

Опять сайт не работает

Гость

  

+
0





Не могу зайти

*** с горы

  

+
0

С*ка этот сайт создавался ******* укропами

аваыаываыа4цк4цй

  

+
0

Добрый день, уважаемые пользователи сайта FunPay.com! В связи с неоплатой хостинга нашим владельцем-********* мы вынуждены ожидать пока его отпустит от очередного прихода от спайса. После долгого бэдтрипа под двумя проститутками он обязательно возьмёт трубку и услышит порцию нецензурной брани от нас. Просим сохранять спокойствие и не поддаваться панике. Деньги за активные заказы перейдут в фонд поддержки малоимущим тиграм в Таджикистане.
С уважением техническая поддержка сайта FunPay.

аыаы

  

+
0

кто сколько сегодня наторговал

WholeLottaGucci

  

+
0

Прям во время сделки сайт лег, bruuuuuh….

стич

  

+
0

Всё ребята работать начал

стич

  

+
0

Похоже что сайт забагался или серваки полетели

ацца

  

+
0

срывается сделка

hikkachu

  

+
0

Сижу на сделке,почти продал товар и — Фанпей

avngxvrd

  

+
0

***** фанпею

Boil

  

+
0

а что с Funpay? октябрь 2022,21:09, его блокнули, или сервера тупят?

Павел

  

+
0

Решил продать свою голду, зарегистрировался на этом сайте выставил её и не дождавшись не одного сообщения от покупателей я получил сразу же блокировку. Написал в тех поддержку за что меня заблокировали , а они и сами оказывается не знают и пишут всякий бред. Никому не советую данную платформу!

Гость

  

+
0





Сайт лагает и просто вылетает

Nosf

  

+
0

А Вы друзья монопалисты =))) Ни кого кроме Вас нет на рынке =)

Вадим

  

+
0

Заработал, поехали!

Scp-049

  

+
0

Продаю акк в вот блиц SCP-049#8224 пишите в дс

Тех.поддержка FunPay ✅

  

+
0

Добрый день дорогие пользователи сайта FunPay. Сайт закрыт на технические работы с 0:00 до 7:00, просим прощения за неудобства и благодарим вас за понимание. Проблем с балансом и другими условностями сайта при открытии не возникнет.

Karall

  

+
0

Добрый день, уважаемые пользователи сайта FunPay.com! В связи с неоплатой хостинга нашим владельцем-********* мы вынуждены ожидать пока его отпустит от очередного прихода от спайса. После долгого бэдтрипа под двумя проститутками он обязательно возьмёт трубку и услышит порцию нецензурной брани от нас. Просим сохранять спокойствие и не поддаваться панике. Деньги за активные заказы перейдут в фонд поддержки малоимущим тиграм в Таджикистане.
С уважением техническая поддержка сайта FunPay.

Техническая поддержка сайта FunPay

  

+
0

Добрый день, уважаемые пользователи сайта FunPay.com! В связи с неоплатой хостинга нашим владельцем-********* мы вынуждены ожидать пока его отпустит от очередного прихода от спайса. После долгого бэдтрипа под двумя проститутками он обязательно возьмёт трубку и услышит порцию нецензурной брани от нас. Просим сохранять спокойствие и не поддаваться панике. Деньги за активные заказы перейдут в фонд поддержки малоимущим тиграм в Таджикистане.
С уважением техническая поддержка сайта FunPay.

Техническая поддержка сайта FunPay

  

+
0

Добрый день, уважаемые пользователи сайта FunPay.com! В связи с неоплатой хостинга нашим владельцем-********* мы вынуждены ожидать пока его отпустит от очередного прихода от спайса. После долгого бэдтрипа под двумя проститутками он обязательно возьмёт трубку и услышит порцию нецензурной брани от нас. Просим сохранять спокойствие и не поддаваться панике. Деньги за активные заказы перейдут в фонд поддержки малоимущим тиграм в Таджикистане.
С уважением техническая поддержка сайта FunPay.

Okarin

  

+
0

*** просто дайте уже в бравл задонатить ироды

Karall-be-best#2915

  

+
0

Продам мать Karall-be-best#2915

человек паук

  

+
1

продаю дешевый донат во все игры IuQokk#3676

Метрошник

  

+
0

Скупаю лут в Metro Royale, писать в ТГ @Metr0shnik

беброзий

  

+
0

у меня и так нервишки расшатаны…

Okarin

  

+
0

а вообще у фан пей есть группа в вк, там тоже уже висит обсуждение

техподдержка Funpay.com

  

+
0

недопоследователи кышь. Я тут главный. Вся слава мне.

FunPay техподдержка

  

+
0

ну я не мог не пошутить аххаахха

Scp-049

  

+
0

Продам акк пишите в ДС SCP-049#8224 wot ***** крутой акк по низкой цене

FunPay техподдержка

  

+
0

Это не байт и не рофл.

беброзий

  

+
0

написали бы хоть грамотно хд

Okarin

  

+
0

ну че ждем тогда

Okarin

  

+
0

ой ***** тролли вы *****, а я еще повелся боже

беброзий

  

+
0

каво *****

FunPay техподдержка

  

+
0

Сайт закрыт навсегда. Деньги не кому возвращены не будут.

Mikvlru

  

+
0

Голда Wow Лич (пламегор Альянс) Телеграм @mikvlru пишите всё обсудим

Karall

  

+
0

Продам почку 300$

Никита

  

+
0

А незакрытые заказы в итоге возвращать будут?

Okarin

  

+
0

здасьте *****. доброе утро, а деньги кто теперь вернет

техподдержка Funpay.com

  

+
0

Дорогие пользователи. Сайт закрываем из-за санкций. Всем всего доброго.

mazay543

  

+
0

продам акк в wot с scorpion g

Xasima

  

+
0

Телеграмм Xasima доначу в игры на 50% дешевле

Xasima

  

+
0

Телеграмм Xasima доначу в игры на 50% дешевле

мур

  

+
0

когда сайт оживет?

господин Xi

  

+
0

завтра нищуки останутся без доширака, наес

беброзий

  

+
0

умирает трамп, через год ему становится скучно…

Вадик

  

+
0

фанпей повесился

Okarin

  

+
0

расскажите свой любимый анекдот

беброзий

  

+
0

пздц я подумала у меня траблы с инетом, моя первая продажа, и прям во время сделки лег сайт

Okarin

  

+
0

пасиб Кирилл, утешил

Никита

  

+
1

Есть инфа когда сайт оживет?

гигант мысли

  

+
0

земля пухом

Кирилл

  

+
0

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

AJAX позволяет отправить и получить данные без перезагрузки страницы. Например, делать проверку форм, подгружать контент и т.д. А функции JQuery значительно упрощают работу.

Полное описание функции AJAX на jquery.com.

1

GET запрос

Запрос идет на index.php с параметром «text» и значением «Текст» через метод GET.
По сути это то же самое что перейти в браузере по адресу – http://site.com/index.php?text=Текст

В результате запроса index.php вернет строку «Данные приняты – Текст», которая будет выведена в сообщении alert.

$.ajax({
	url: '/index.php',         /* Куда пойдет запрос */
	method: 'get',             /* Метод передачи (post или get) */
	dataType: 'html',          /* Тип данных в ответе (xml, json, script, html). */
	data: {text: 'Текст'},     /* Параметры передаваемые в запросе. */
	success: function(data){   /* функция которая будет выполнена после успешного запроса.  */
		alert(data);            /* В переменной data содержится ответ от index.php. */
	}
});

JS

Код можно сократить используя функцию $.get

$.get('/index.php', {text: 'Текст'}, function(data){
	alert(data);
});

JS

Код файла index.php

echo 'Данные приняты - ' . $_GET['text'];

PHP

GET запросы могут кэшироваться браузером или сервером, чтобы этого избежать нужно добавить в функцию параметр – cache: false.

$.ajax({
	url: '/index.php',
	method: 'get',
	cache: false
});

JS

2

POST запросы

$.ajax({
	url: '/index.php',
	method: 'post',
	dataType: 'html',
	data: {text: 'Текст'},
	success: function(data){
		alert(data);
	}
});

JS

Или сокращенная версия – функция $.post

$.post('/index.php', {text: 'Текст'}, function(data){
	alert(data);
});

JS

Код файла index.php

echo 'Данные приняты - ' . $_POST['text'];

PHP

POST запросы ни когда не кэшироваться.

3

Отправка формы через AJAX

При отправке формы применяется функция serialize(), подробнее на jquery.com.

Она обходит форму и собирает названия и заполненные пользователем значения полей и возвращает в виде массива – {login: 'ЗНАЧЕНИЯ_ПОЛЯ', password: 'ЗНАЧЕНИЯ_ПОЛЯ'}.

Особенности serialize():

  • Кнопки формы по которым был клик игнорируются, в результате функции их не будет.
  • serialize можно применить только к тегу form и полям формы, т.е. $('div.form_container').serialize(); – вернет пустой результат.

Пример отправки и обработки формы:

<div class="form_container">
	<div id="message"></div>
	<form id="form">
		<input type="text" name="login">
		<input type="text" name="password">
		<input type="submit" name="send" value="Отправить">
	</form>
</div>

<script>
$("#form").on("submit", function(){
	$.ajax({
		url: '/handler.php',
		method: 'post',
		dataType: 'html',
		data: $(this).serialize(),
		success: function(data){
			$('#message').html(data);
		}
	});
});
</script>

HTML

Код файла handler.php

if (empty($_POST['login'])) {
	echo 'Укажите логин';
} elseif (empty($_POST['password'])) {
	echo 'Укажите пароль';
} else {
	echo 'Авторизация...';
}

PHP

4

Работа с JSON

Идеальный вариант когда нужно работать с массивами данных.

$.ajax({
	url: '/json.php',
	method: 'get',
	dataType: 'json',
	success: function(data){
		alert(data.text);    /* выведет "Текст" */
		alert(data.error);   /* выведет "Ошибка" */
	}
});

JS

Короткая версия

$.getJSON('/json.php', function(data) {
	alert(data.text);
	alert(data.error);
});

JS

$.getJSON передает запрос только через GET.

Код файла json.php

header('Content-Type: application/json');

$result = array(
	'text'  => 'Текст',
	'error' => 'Ошибка'
);

echo json_encode($result);

PHP

Возможные проблемы

При работе с JSON может всплыть одна ошибка – после запроса сервер отдал результат, все хорошо, но метод success не срабатывает. Причина кроется в серверной части (PHP) т.к. перед данными могут появится управляющие символы, например:

Управляющие символы в ответе JSON

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

В таких случаях помогает очистка буфера вывода ob_end_clean (если он используется на сайте).

...

// Очистка буфера
ob_end_clean(); 
		
header('Content-Type: application/json');
echo json_encode($result, JSON_UNESCAPED_UNICODE);
exit();

PHP

5

Выполнение JS загруженного через AJAX

В JQuery реализована функция подгруздки кода JS через AJAX, после успешного запроса он будет сразу выполнен.

$.ajax({
	method: 'get',
	url: '/script.js',
	dataType: "script"
});

JS

Или

$.getScript('/script.js');

JS

6

Дождаться выполнения AJAX запроса

По умолчанию в JQuery AJAX запросы выполняются асинхронно. Т.е. запрос не задерживает выполнение программы пока ждет результатов, а работает параллельно.

Простой пример:

var text = '';

$.ajax({
	url: '/index.php',
	method: 'get',
	dataType: 'html',
	success: function(data){
		text = data;
	}
});

alert(text);  /* Переменная будет пустая. */

JS

Переменная text будет пустая, а не как ожидается текст который вернул index.php

Чтобы включить синхронный режим нужно добавить параметр async: false.
Соответственно синхронный запрос будет вешать прогрузку страницы если код выполняется в <head> страницы.

var text = '';

$.ajax({
	url: '/index.php',
	method: 'get',
	dataType: 'html',
	async: false,
	success: function(data){
		text = data;
	}
});

alert(text); /* В переменной будет результат из index.php. */

JS

7

Отправка HTTP заголовков

Через AJAX можно отправить заголовки HEAD, они указываются в параметре headers.

$.ajax({
	url: '/index.php',
	method: 'get',
	dataType: 'html',
	headers: {'Token_value': 123},
	success: function(data){
		console.dir(data);
	}
});

JS

В PHP они будут доступны в массиве $_SERVER, ключ массива переводится в верхний регистр с приставкой HTTP_, например:

<?php
echo $_SERVER['HTTP_TOKEN_VALUE']; // 123

PHP

8

Обработка ошибок

Через параметр error задается callback-функция, которая будет вызвана в случаи если запрашиваемый ресурс отдал 404, 500 или другой код.

$.ajax({
	url: '/index.php',
	method: 'get',
	dataType: 'json',
	success: function(data){
		console.dir(data);
	},
	error: function (jqXHR, exception) {
		if (jqXHR.status === 0) {
			alert('Not connect. Verify Network.');
		} else if (jqXHR.status == 404) {
			alert('Requested page not found (404).');
		} else if (jqXHR.status == 500) {
			alert('Internal Server Error (500).');
		} else if (exception === 'parsererror') {
			alert('Requested JSON parse failed.');
		} else if (exception === 'timeout') {
			alert('Time out error.');
		} else if (exception === 'abort') {
			alert('Ajax request aborted.');
		} else {
			alert('Uncaught Error. ' + jqXHR.responseText);
		}
	}
});

JS

Через $.ajaxSetup можно задать обработчик ошибок для всех AJAX-запросов на сайте.

$.ajaxSetup({
	error: function (jqXHR, exception) {
		...
	}
});

JS

  • Связанные категории:
  • Ajax
    » Low-Level Interface

Returns: jqXHR

Выполняет асинхронный HTTP (Ajax) запрос

  • version added: 1.5jQuery.ajax( url [, settings] )

    url
    Тип: Строка
    URL адрес, на который будет отправлен Ajax запрос

    settings
    Тип: Объект
    Набор параметров вида ключ / значение, которые настраивают запрос Ajax. Все настройки опциональны. По умолчанию настройки берутся из $.ajaxSetup(). Ниже приведен полный список всех настроек.

  • version added: 1.0jQuery.ajax( settings )

    settings
    Тип: Объект
    Набор параметров вида ключ / значение, которые настраивают запрос Ajax. Все настройки опциональны. По умолчанию настройки берутся из $.ajaxSetup().

settings:

Настройка Тип данных
accepts

По умолчанию: зависит от типа данных

При выполнении ajax-запроса, в заголовках (header) указываются допустимые типы содержимого, ожидаемого от сервера. Значения этих типов будут взяты из параметра accepts. Если требуется его изменить, лучше сделать это с помощью метода $.ajaxSetup().

объект
async

По умолчанию: true

По умолчанию, все запросы отсылаются асинхронно (значение данного параметра true). Если же вам нужны синхронные запросы, то параметру async выставите значение false. Кроссдоменные запросы и dataType: «jsonp» не выполняются в синхронном режиме. Учтите, синхронные запросы могут на время выполнения запроса заблокировать браузер.

логический
beforeSend(jqXHR jqXHR, объект settings)

Функция, которая будет вызвана непосредственно перед отправкой ajax-запроса на сервер. Она может быть использована для модификации jqXHR-объекта (в ранних версиях, до jQuery 1.4.x использовался XMLHttpRequest). Так же может использоваться для изменения заголовков (headers) и т.д. Объект типа jqXHR и объект настроек, передаются в качестве аргументов. Возврат значения false в функции beforeSend вызовет отмену ajax-запроса. Начиная с jQuery 1.5, beforeSend сработает вне зависимости от типа запроса.

функция
cache

По умолчанию: true, false для типов данных ‘script’ and ‘jsonp’

Если false, запрашиваемая страница не будет кэшироваться браузером.

логический
complete(jqXHR jqXHR, строка textStatus)

Функция, которая будет вызвана после завершения ajax запроса (срабатывает после функций-обработчиков success и error). Функция принимает два аргумента: объект типа jqXHR (в ранних версиях, до jQuery 1.4.x использовался XMLHttpRequest) и строку, характеризующую статус запроса («success», «notmodified», «error», «timeout», «abort», или «parsererror»). Начиная с jQuery 1.5, complete может принимать массив функций.

функция или массив
contents

Параметр задается в формате {строка:регулярное выражение} и определяет, как jQuery будет разбирать ответ от сервера, в зависимости от его типа. (добалено в версии 1.5) 

объект
contentType

По умолчанию: ‘application/x-www-form-urlencoded; charset=UTF-8’

При отправке Ajax запроса, данные передаются в том виде, в котором указаны в данном параметре. По умолчанию используется ‘application/x-www-form-urlencoded; charset=UTF-8’. Если задать значение самим, то оно будет отправлено на сервер. Если кодировка не указана, то по умолчанию будет использоваться кодировка выставленная на сервере.

строка
context

Объект, который станет контекстом после выполнения запроса (передаваемое значение в переменную this). Например, если указать в качестве контекста DOM-элемент, то все обработчики ajax-запроса тоже будут выполняться в контексте данного DOM-элемента. В данном примере ключевое слово this будет содержать document.body:

$.ajax({
  url: "test.html",
  context: document.body,
  success: function(){
    $(this).addClass("done");
  }
});    
    
объект
converters

По умолчанию: {«* text»: window.String, «text html»: true, «text json»: jQuery.parseJSON, «text xml»: jQuery.parseXML}

Определяет, с помощью каких функций будет производиться конвертация значений из одного типа, в другой. (добалено в версии 1.5)

объект
crossDomain

По умолчанию: false для одного и того же домена, true для кроссбоменных запросов.

Если вы хотите, чтобы выполнить кросс-доменный запрос (например, JSONP) на том же домене, выставите true в настройке crossDomain. Это позволяет, например, сделать серверные перенаправление на другой домен. (добалено в версии 1.5)

логический
data

Данные, которые будут переданы на сервер. Если данные не являются строкой, то они конвертируются в строку запроса. Для запросов типа GET данные прикрепляются к URL. Объект должен состоять из пар ключ/значение. Если в значении массив, то jQuery упорядочивает значения в зависимости от настройки traditional. По умолчанию, например, {foo:[«bar1», «bar2»]} превращается в &foo=bar1&foo=bar2.

объект или строка
dataFilter(строка data, строка type)

Функция, с помощью которой будут обрабатываться сырые данные типа XMLHttpRequest, полученные от сервера. Ваша функция должна играть роль фильтра и возвращать очищенную строку. В функцию передаются два параметра: полученные данные и значение параметра dataType.

функция
dataType

По умолчанию: автоматически определяемая строка (xml, json, script, или html)

Тип данных, ожидаемых от сервера. Если опция не определена, то jQuery попытается определить тип, основываясь на MIME-типе ответа. 

строка
error(jqXHR jqXHR, строка textStatus, строка errorThrown)

Функция, исполняемая в случае неудачного запроса. Принимает 3 аргумента: объект jqXHR (в прошлом XMLHttpRequest), строку с описанием ошибки, а так же строку исключения, если оно было выбрашено. Второй аргумент может содержать следующие значения: null, «timeout», «error», «abort», и «parsererror». В случае если происходит HTTP ошибка, то в третий аргумент будет записан её текстовой статус.  К примеру, «Not Found» или «Internal Server Error.». Начиная с jQuery 1.5, вместо одной функции, этот параметр может принимать массив функций. Событие error не происходит при dataType равному script или JSONP.

функция или массив
global

По умолчанию: true.

Вызывать или нет глобальные обработчики событий Ajax для этого запроса (например ajaxStart или ajaxStop).

логический
headers

По умолчанию: {}

Здесь можно указать дополнительные заголовки запроса (header). Значения этой настройки будут введены до вызова функции beforeSend, в которой могут быть внесены окончательные изменения в заголовки. (добалено в версии 1.5)

объект
ifModified

По умолчанию: false

Запрос будет считаться успешным только в случае, если данные ответа изменились со времени последнего запроса. Проверка осуществляется по заголовку Last-Modified. По умолчани, данная опция отключена. В jQuery 1.4 так же проверяется значение ‘etag’, для отслеживания факта изменения данных.

логический
isLocal

По умолчанию: в зависимости от текущей локации

Параметр определяет, запущена ли веб-страница локально (например по протоколу file, *-extension, и widget) или нет (например по протоколу http). Данную настройку лучше менять с помощью метода $.ajaxSetup(). (добалено в версии 1.5)

логический
jsonp

Определяет имя параметра, который добавляется в url JSONP-запроса(по умолчанию, используется «callback»). К примеру настройка {jsonp:’onJSONPLoad’} преобразуется в часть url строки ‘onJSONPLoad=?’. Начиная с версии 1.5, указание в этом параметре false предотвращает добавление в url дополнительного параметра. В этом случае, необходимо установить значение настройки jsonpCallback. Например так: {jsonp:false, jsonpCallback:»callbackName»}.

строка
jsonpCallback

Функция, которая будет вызвана при ответе сервера на запрос типа JSONP. По умолчанию, jQuery генерирует произвольное уникальное имя этой функции, что более предпочтительно. Если вы хотите использовать кэширование GET запросов, то вписывайте название функции сами. Начиная с версии 1.5 можно указать функцию, для того, чтобы обработать ответ сервера самостоятельно.

строка или функция
mimeType

Здесь можно указать тип данных,  в котором ожидается ответ от сервера вместо XHR. (добалено в версии 1.5.1)

строка
password

Пароль, который будет использоваться в ответ на запрос проверки подлинности доступа HTTP (если это требуется)

строка
username

Имя пользователя, которое будет использоваться в ответ на запрос проверки подлинности доступа HTTP (если это требуется)

строка
processData

По умолчанию: true;

По умолчанию передаваемые на сервер данные преобразуются из объекта в строку запроса и отправляются как «application/x-www-form-urlencoded». Если вам необходимо отправить DOM-документ или иные данные, которые нельзя подвергать конвертированию установите опцию processData в false.

логический
scriptCharset

Применяется только для Ajax GET-запросов типов ‘JSONP’ и ‘script ‘. Если сервер на стороннем домене использует кодировку, отличную от вашей, необходимо указать кодировку стороннего сервера.

строка
statusCode

По умолчанию: {}

Набор пар, в котором кодам выполнения запроса сопоставляются функции, которые при этом будет вызваны. Например, для кода 404 (страницы не существуют) можно сделать вывод сообщения на экран:

$.ajax({
  statusCode:{
    404:function(){
      alert('Страница не найдена');
    }
  }
});    

Если запрос прошёл успешно, то в качестве параметра, анонимная функция будет принимать те же параметры, что и при success. При ошибке, будет принимать то же самое что и при функции-обработчике error. (добалено в версии 1.5)

объект
success(объект data, строка textStatus, объект jqXHR)

Функция, которая будет вызвана в случае успешного завершения запроса. Принимает 3 аргумента — данные (data), присланные сервером и прошедшие предварительную обработку; строка со статусом выполнения (textStatus); объект jqXHR (в версиях до 1.5 вместо jqXHR используетсяXMLHttpRequest). С версии jQuery 1.5, вместо одной функции, этот параметр может принимать массив функций.

функция или массив
timeout

Время ожидания ответа от сервера в миллисекундах. Переписывает глобальную настройку этого же параметра в $.ajaxSetup(). Если это время будет превышено, запрос будет завершен с ошибкой и произойдет событие error, которое будет иметь статус «timeout».

число
traditional

По умолчанию: false

Установите значение этого параметра в true, для того, чтобы использовать традиционный стиль сериализации.

логический
type

По умолчанию: GET

Определяет тип запроса GET или POST. Можно также использовать другие HTTP-запросы (такие как PUT или DELETE), но следует помнить, что они поддерживаются не всеми бразерами.

строка
url

По умолчанию: текущая страница.

Страница, накоторую будет отправлен запрос.

строка
xhr

По умолчанию ActiveXObject в IE, XMLHttpRequest в других браузерах.

Callback-функция, для создания объекта XMLHttpRequest. Создав свою функцию, вы берёте на себя всю ответственность за формирование объекта.

function
xhrFields

Объект вида {имя:значене} для изменения значений соответствующих полей объекта XMLHttpRequest.

$.ajax({
   url: a_cross_domain_url,
   xhrFields: {
      withCredentials: true
   }
});

(добалено в версии 1.5.1)

map

Примеры

Сохранить данные на сервере и оповестить об этом пользователя.

$.ajax({
  type: "POST",
  url: "some.php",
  data: { name: "John", location: "Boston" }
}).done(function( msg ) {
  alert( "Data Saved: " + msg );
});

Получить последнюю версию HTML страницы

$.ajax({
  url: "test.html",
  cache: false
}).done(function( html ) {
  $("#results").append(html);
});

Передаём в качестве данных XML документ. Отключаем автоматическую конвертацию данных в обычную строку, задав настройке processData значение false:

var xmlDocument = [create xml document];
var xmlRequest = $.ajax({
  url: "page.php",
  processData: false,
  data: xmlDocument
});
 
xmlRequest.done(handleResponse);

Отправить на сервер значение ID. Сохранить данные, оповестить пользователя. Если запрос не прошёл, сообщить об этом пользователю.

var menuId = $("ul.nav").first().attr("id");
var request = $.ajax({
  url: "script.php",
  type: "POST",
  data: {id : menuId},
  dataType: "html"
});
 
request.done(function(msg) {
  $("#log").html( msg );
});
 
request.fail(function(jqXHR, textStatus) {
  alert( "Request failed: " + textStatus );
});

Загрузить и выполнить файл JavaScript:

$.ajax({
  type: "GET",
  url: "test.js",
  dataType: "script"
});

Добрый вечер дорогие форумчане. Подскажите пожалуйста, почему при попытке отправить ajax запрос, у меня выскакивает alert из error??? Всю голову уже сломал, весь интернет уже перерыл.
2) И почему после того как я нажимаю ок в alert у меня перезагружается страница??

шаблон

{% extends "crm/main_struct.html" %}
{% load staticfiles %}

{% block content %}

<!--ОБЯЗАТЕЛЬНО СДЕЛАТЬ ФУНКЦИЮ НА JS КОТОРАЯ БУДЕТ ВЫЧИСЛЯТЬ ОТСТУПЫ И В НУЖНОЕ МЕСТО ПИХАТЬ КОНТЕНТ САЙТОВ-->
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>

<script>
$(document).ready(function() {
  $('ul.tabs_m_w').each(function() {
    $(this).find('li').each(function(i) {
      $(this).click(function() {
        $(this).addClass('active').siblings().removeClass('active');
        var p = $(this).parents('div.tabs_container_m_w');
        p.find('div.tab_container_m_w').hide();
        p.find('div.tab_container_m_w:eq(' + i + ')').show();
      });
    });
  });
})
</script>
<a href="{{url}}/crm/my_work/new/" class="add_notebook_a">
    <div class="add_notebook">Добавить</div>
</a>
<div class="tabs_container_m_w">
  <ul class="tabs_m_w">
      {% for notebook in notebookList %}
        <li class="inl-bl_m_w">
            <div class="m_w_list_head">{{notebook.name}}</div>
            <div class="m_w_list_date">{{notebook.date_firstly}}</div>
            <div class="m_w_list_kr_info">{{notebook.kr_info}}</div>
        </li>
      {% endfor %}
  </ul>

    {% for notebook in notebookList %}
  <div class="tab_container_m_w">
      <a href="" onclick="resend({{notebook.id}});" class="a_tab">
          <div class="m_w_save">
            Сохранить
          </div>
      </a>
    <div class="m_w_info_head" id="name{{notebook.id}}" contentEditable="true">{{notebook.name}}</div>
      <div class="m_w_info_info" id="info{{notebook.id}}" contentEditable="true">{{notebook.information}}</div>
  </div>
{% endfor %}

</div>

<script>
    function resend(pk){
           var name = document.getElementById('name' + pk).innerHTML.trim().replace(/<.*?>/g, "");
           var info = document.getElementById('info' + pk).innerHTML.trim().replace(/<.*?>/g, "");
           edit(name, info, pk);
    }
</script>

<script>
function edit(name, info, pk) {
// Если поля заполнены, отправляем их значения
        $.ajax({
            error: function() {
                alert('Ошибка получения запроса');
            },
    // При успехе очищаем поля и меняем кнопочку
                success: function(data) {
                 alert("Успех"); // для проверки, что скрипт работает
                },
    // CSRF механизм защиты Django
                beforeSend: function(xhr, settings) {
                    console.log('-------------before send--');
                    function getCookie(name) {
                        var cookieValue = null;
                        if (document.cookie && document.cookie != '') {
                            var cookies = document.cookie.split(';');
                            for (var i = 0; i < cookies.length; i++) {
                                var cookie = jQuery.trim(cookies[i]);
                                // Does this cookie string begin with the name we want?
                            if (cookie.substring(0, name.length + 1) == (name + '=')) {
                                cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                                break;
                            }
                        }
                    }
                    return cookieValue;
                    }
                    if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) {
                        // Only send the token to relative URLs i.e. locally.
                        xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));
                    }
                }
            });// ajax


        return false;
    };
</script>
{% endblock %}

urls.py

urlpatterns = patterns('',
    url(r'^my_work/edit/$', views.NBEdit, name='crm_edit_NB'),
)

views.py

def NBEdit(request):
    if request.is_ajax():
        for i in MyDela.objects.filter(pk=request.POST.get("id", "")):
            i.name = request.POST.get("name", "")[:250]
            i.information = request.POST.get("info", "")
            i.save()
        #  return HttpResponse("ok")
        return HttpResponseRedirect('/crm/sites/')
    else:
        #  return HttpResponse("bad")
        return HttpResponseRedirect('/crm/zayvki/')

Прошу не кидаться помидорами, я только учусь кодить))

AJAX позволяет отправить и получить данные без перезагрузки страницы. Например, делать проверку форм, подгружать контент и т.д. А функции JQuery значительно упрощают работу.

Полное описание функции AJAX на jquery.com.

1

GET запрос

Запрос идет на index.php с параметром «text» и значением «Текст» через метод GET.
По сути это то же самое что перейти в браузере по адресу – http://site.com/index.php?text=Текст

В результате запроса index.php вернет строку «Данные приняты – Текст», которая будет выведена в сообщении alert.

$.ajax({
	url: '/index.php',         /* Куда пойдет запрос */
	method: 'get',             /* Метод передачи (post или get) */
	dataType: 'html',          /* Тип данных в ответе (xml, json, script, html). */
	data: {text: 'Текст'},     /* Параметры передаваемые в запросе. */
	success: function(data){   /* функция которая будет выполнена после успешного запроса.  */
		alert(data);            /* В переменной data содержится ответ от index.php. */
	}
});

JS

Код можно сократить используя функцию $.get

$.get('/index.php', {text: 'Текст'}, function(data){
	alert(data);
});

JS

Код файла index.php

echo 'Данные приняты - ' . $_GET['text'];

PHP

GET запросы могут кэшироваться браузером или сервером, чтобы этого избежать нужно добавить в функцию параметр – cache: false.

$.ajax({
	url: '/index.php',
	method: 'get',
	cache: false
});

JS

2

POST запросы

$.ajax({
	url: '/index.php',
	method: 'post',
	dataType: 'html',
	data: {text: 'Текст'},
	success: function(data){
		alert(data);
	}
});

JS

Или сокращенная версия – функция $.post

$.post('/index.php', {text: 'Текст'}, function(data){
	alert(data);
});

JS

Код файла index.php

echo 'Данные приняты - ' . $_POST['text'];

PHP

POST запросы ни когда не кэшироваться.

3

При отправке формы применяется функция serialize(), подробнее на jquery.com.

Она обходит форму и собирает названия и заполненные пользователем значения полей и возвращает в виде массива – {login: 'ЗНАЧЕНИЯ_ПОЛЯ', password: 'ЗНАЧЕНИЯ_ПОЛЯ'}.

Особенности serialize():

  • Кнопки формы по которым был клик игнорируются, в результате функции их не будет.
  • serialize можно применить только к тегу form и полям формы, т.е. $('div.form_container').serialize(); – вернет пустой результат.

Пример отправки и обработки формы:

<div class="form_container">
	<div id="message"></div>
	<form id="form">
		<input type="text" name="login">
		<input type="text" name="password">
		<input type="submit" name="send" value="Отправить">
	</form>
</div>

<script>
$("#form").on("submit", function(){
	$.ajax({
		url: '/handler.php',
		method: 'post',
		dataType: 'html',
		data: $(this).serialize(),
		success: function(data){
			$('#message').html(data);
		}
	});
});
</script>

HTML

Код файла handler.php

if (empty($_POST['login'])) {
	echo 'Укажите логин';
} elseif (empty($_POST['password'])) {
	echo 'Укажите пароль';
} else {
	echo 'Авторизация...';
}

PHP

4

Работа с JSON

Идеальный вариант когда нужно работать с массивами данных.

$.ajax({
	url: '/json.php',
	method: 'get',
	dataType: 'json',
	success: function(data){
		alert(data.text);    /* выведет "Текст" */
		alert(data.error);   /* выведет "Ошибка" */
	}
});

JS

Короткая версия

$.getJSON('/json.php', function(data) {
	alert(data.text);
	alert(data.error);
});

JS

$.getJSON передает запрос только через GET.

Код файла json.php

header('Content-Type: application/json');

$result = array(
	'text'  => 'Текст',
	'error' => 'Ошибка'
);

echo json_encode($result);

PHP

Возможные проблемы

При работе с JSON может всплыть одна ошибка – после запроса сервер отдал результат, все хорошо, но метод success не срабатывает. Причина кроется в серверной части (PHP) т.к. перед данными могут появится управляющие символы, например:

Управляющие символы в ответе JSON

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

В таких случаях помогает очистка буфера вывода ob_end_clean (если он используется на сайте).

...

// Очистка буфера
ob_end_clean(); 
		
header('Content-Type: application/json');
echo json_encode($result, JSON_UNESCAPED_UNICODE);
exit();

PHP

5

Выполнение JS загруженного через AJAX

В JQuery реализована функция подгруздки кода JS через AJAX, после успешного запроса он будет сразу выполнен.

$.ajax({
	method: 'get',
	url: '/script.js',
	dataType: "script"
});

JS

Или

$.getScript('/script.js');

JS

6

По умолчанию в JQuery AJAX запросы выполняются асинхронно. Т.е. запрос не задерживает выполнение программы пока ждет результатов, а работает параллельно.

Простой пример:

var text = '';

$.ajax({
	url: '/index.php',
	method: 'get',
	dataType: 'html',
	success: function(data){
		text = data;
	}
});

alert(text);  /* Переменная будет пустая. */

JS

Переменная text будет пустая, а не как ожидается текст который вернул index.php

Чтобы включить синхронный режим нужно добавить параметр async: false.
Соответственно синхронный запрос будет вешать прогрузку страницы если код выполняется в <head> страницы.

var text = '';

$.ajax({
	url: '/index.php',
	method: 'get',
	dataType: 'html',
	async: false,
	success: function(data){
		text = data;
	}
});

alert(text); /* В переменной будет результат из index.php. */

JS

7

Отправка HTTP заголовков

Через AJAX можно отправить заголовки HEAD, они указываются в параметре headers.

$.ajax({
	url: '/index.php',
	method: 'get',
	dataType: 'html',
	headers: {'Token_value': 123},
	success: function(data){
		console.dir(data);
	}
});

JS

В PHP они будут доступны в массиве $_SERVER, ключ массива переводится в верхний регистр с приставкой HTTP_, например:

<?php
echo $_SERVER['HTTP_TOKEN_VALUE']; // 123

PHP

8

Обработка ошибок

Через параметр error задается callback-функция, которая будет вызвана в случаи если запрашиваемый ресурс отдал 404, 500 или другой код.

$.ajax({
	url: '/index.php',
	method: 'get',
	dataType: 'json',
	success: function(data){
		console.dir(data);
	},
	error: function (jqXHR, exception) {
		if (jqXHR.status === 0) {
			alert('Not connect. Verify Network.');
		} else if (jqXHR.status == 404) {
			alert('Requested page not found (404).');
		} else if (jqXHR.status == 500) {
			alert('Internal Server Error (500).');
		} else if (exception === 'parsererror') {
			alert('Requested JSON parse failed.');
		} else if (exception === 'timeout') {
			alert('Time out error.');
		} else if (exception === 'abort') {
			alert('Ajax request aborted.');
		} else {
			alert('Uncaught Error. ' + jqXHR.responseText);
		}
	}
});

JS

Через $.ajaxSetup можно задать обработчик ошибок для всех AJAX-запросов на сайте.

$.ajaxSetup({
	error: function (jqXHR, exception) {
		...
	}
});

JS

jQuery.ajax()

При выполнении ajax-запроса, в заголовках (header) указываются допустимые типы содержимого, ожидаемого от сервера. Значения этих типов будут взяты из параметра accepts . Если требуется его изменить, лучше сделать это с помощью метода $.ajaxSetup().

async

По умолчанию: true

По умолчанию, все запросы отсылаются асинхронно (значение данного параметра true). Если же вам нужны синхронные запросы, то параметру async выставите значение false. Кроссдоменные запросы и dataType: «jsonp» не выполняются в синхронном режиме. Учтите, синхронные запросы могут на время выполнения запроса заблокировать браузер.

beforeSend(jqXHR jqXHR , объект settings)

Функция, которая будет вызвана непосредственно перед отправкой ajax-запроса на сервер. Она может быть использована для модификации jqXHR-объекта (в ранних версиях, до jQuery 1.4.x использовался XMLHttpRequest). Так же может использоваться для изменения заголовков (headers) и т.д. Объект типа jqXHR и объект настроек, передаются в качестве аргументов.

КАК ОБОЙТИ БЛОКИРОВКУ НА САЙТЕ FUNPAY ? ПОЛУЧИЛ БАН НА ФАНПЕЙ, ЧТО ДЕЛАТЬ ? РАЗБАН ФП АККАУНТА !

Возврат значения false в функции beforeSend вызовет отмену ajax-запроса. Начиная с jQuery 1.5, beforeSend сработает вне зависимости от типа запроса.

cache

По умолчанию: true, false для типов данных ‘script’ and ‘jsonp’

Если false, запрашиваемая страница не будет кэшироваться браузером.

complete( jqXHR jqXHR, строка textStatus)

Функция, которая будет вызвана после завершения ajax запроса (срабатывает после функций-обработчиков success и error). Функция принимает два аргумента: объект типа jqXHR (в ранних версиях, до jQuery 1.4.x использовался XMLHttpRequest) и строку, характеризующую статус запроса («success», «notmodified», «error», «timeout», «abort», или «parsererror»). Начиная с jQuery 1.5, complete может принимать массив функций.

contents

Параметр задается в формате и определяет, как jQuery будет разбирать ответ от сервера, в зависимости от его типа. (добалено в версии 1.5)

contentType

По умолчанию: ‘application/x-www-form-urlencoded; charset=UTF-8’

При отправке Ajax запроса, данные передаются в том виде, в котором указаны в данном параметре. По умолчанию используется ‘application/x-www-form-urlencoded; charset=UTF-8’. Если задать значение самим, то оно будет отправлено на сервер. Если кодировка не указана, то по умолчанию будет использоваться кодировка выставленная на сервере.

context

Объект, который станет контекстом после выполнения запроса (передаваемое значение в переменную this). Например, если указать в качестве контекста DOM-элемент, то все обработчики ajax-запроса тоже будут выполняться в контексте данного DOM-элемента. В данном примере ключевое слово this будет содержать document.body:

$.ajax( < url: «test.html», context: document.body, success: function()< $(this).addClass(«done»); >>);

converters

Определяет, с помощью каких функций будет производиться конвертация значений из одного типа, в другой. (добалено в версии 1.5)

😒 Бан на FunPay💩

crossDomain

По умолчанию: false для одного и того же домена, true для кроссбоменных запросов.

Если вы хотите, чтобы выполнить кросс-доменный запрос (например, JSONP) на том же домене, выставите true в настройке crossDomain. Это позволяет, например, сделать серверные перенаправление на другой домен. (добалено в версии 1.5)

data

Данные, которые будут переданы на сервер. Если данные не являются строкой, то они конвертируются в строку запроса. Для запросов типа GET данные прикрепляются к URL. Объект должен состоять из пар ключ/значение. Если в значении массив, то jQuery упорядочивает значения в зависимости от настройки traditional.

По умолчанию, например, превращается в foo=bar2.

dataFilter( строка data, строка type)

Функция, с помощью которой будут обрабатываться сырые данные типа XMLHttpRequest, полученные от сервера. Ваша функция должна играть роль фильтра и возвращать очищенную строку. В функцию передаются два параметра: полученные данные и значение параметра dataType.

dataType

По умолчанию: автоматически определяемая строка (xml, json, script, или html)

Тип данных, ожидаемых от сервера. Если опция не определена, то jQuery попытается определить тип, основываясь на MIME-типе ответа.

error( jqXHR jqXHR, строка textStatus, строка errorThrown)

Функция, исполняемая в случае неудачного запроса. Принимает 3 аргумента: объект jqXHR (в прошлом XMLHttpRequest), строку с описанием ошибки, а так же строку исключения, если оно было выбрашено. Второй аргумент может содержать следующие значения: null, «timeout», «error», «abort», и «parsererror». В случае если происходит HTTP ошибка, то в третий аргумент будет записан её текстовой статус.

К примеру, «Not Found» или «Internal Server Error.». Начиная с jQuery 1.5, вместо одной функции, этот параметр может принимать массив функций. Событие error не происходит при dataType равному script или JSONP.

global

По умолчанию: true.

Вызывать или нет глобальные обработчики событий Ajax для этого запроса (например ajaxStart или ajaxStop).

headers

По умолчанию: <>

Здесь можно указать дополнительные заголовки запроса (header). Значения этой настройки будут введены до вызова функции beforeSend, в которой могут быть внесены окончательные изменения в заголовки. (добалено в версии 1.5)

ifModified

По умолчанию: false

Запрос будет считаться успешным только в случае, если данные ответа изменились со времени последнего запроса. Проверка осуществляется по заголовку Last-Modified. По умолчани, данная опция отключена. В jQuery 1.4 так же проверяется значение ‘etag’, для отслеживания факта изменения данных.

isLocal

По умолчанию: в зависимости от текущей локации

Параметр определяет, запущена ли веб-страница локально (например по протоколу file, *-extension, и widget) или нет (например по протоколу http). Данную настройку лучше менять с помощью метода $.ajaxSetup(). (добалено в версии 1.5)

jsonp

Определяет имя параметра, который добавляется в url JSONP-запроса(по умолчанию, используется «callback»). К примеру настройка преобразуется в часть url строки ‘onJSONPLoad=?’. Начиная с версии 1.5, указание в этом параметре false предотвращает добавление в url дополнительного параметра. В этом случае, необходимо установить значение настройки jsonpCallback. Например так: .

jsonpCallback

Функция, которая будет вызвана при ответе сервера на запрос типа JSONP. По умолчанию, jQuery генерирует произвольное уникальное имя этой функции, что более предпочтительно. Если вы хотите использовать кэширование GET запросов, то вписывайте название функции сами. Начиная с версии 1.5 можно указать функцию, для того, чтобы обработать ответ сервера самостоятельно.

mimeType

Здесь можно указать тип данных, в котором ожидается ответ от сервера вместо XHR. (добалено в версии 1.5.1)

password

Пароль, который будет использоваться в ответ на запрос проверки подлинности доступа HTTP (если это требуется)

username

Имя пользователя, которое будет использоваться в ответ на запрос проверки подлинности доступа HTTP (если это требуется)

processData

По умолчанию: true;

По умолчанию передаваемые на сервер данные преобразуются из объекта в строку запроса и отправляются как «application/x-www-form-urlencoded». Если вам необходимо отправить DOM-документ или иные данные, которые нельзя подвергать конвертированию установите опцию processData в false.

scriptCharset

Применяется только для Ajax GET-запросов типов ‘JSONP’ и ‘script ‘. Если сервер на стороннем домене использует кодировку, отличную от вашей, необходимо указать кодировку стороннего сервера.

statusCode

Набор пар, в котором кодам выполнения запроса сопоставляются функции, которые при этом будет вызваны. Например, для кода 404 (страницы не существуют) можно сделать вывод сообщения на экран:

$.ajax( < statusCode:< 404:function()< alert(‘Страница не найдена’); >> >);

Если запрос прошёл успешно, то в качестве параметра, анонимная функция будет принимать те же параметры, что и при success. При ошибке, будет принимать то же самое что и при функции-обработчике error. (добалено в версии 1.5)

success( объект data, строка textStatus, объект jqXHR)

Функция, которая будет вызвана в случае успешного завершения запроса. Принимает 3 аргумента — данные (data), присланные сервером и прошедшие предварительную обработку; строка со статусом выполнения (textStatus); объект jqXHR (в версиях до 1.5 вместо jqXHR используетсяXMLHttpRequest). С версии jQuery 1.5, вместо одной функции, этот параметр может принимать массив функций.

timeout

Время ожидания ответа от сервера в миллисекундах. Переписывает глобальную настройку этого же параметра в $.ajaxSetup(). Если это время будет превышено, запрос будет завершен с ошибкой и произойдет событие error, которое будет иметь статус «timeout».

traditional

По умолчанию: false

Установите значение этого параметра в true, для того, чтобы использовать традиционный стиль сериализации.

type

По умолчанию: GET

Определяет тип запроса GET или POST. Можно также использовать другие HTTP-запросы (такие как PUT или DELETE), но следует помнить, что они поддерживаются не всеми бразерами.

url

По умолчанию: текущая страница.

Страница, накоторую будет отправлен запрос.

xhr

По умолчанию ActiveXObject в IE, XMLHttpRequest в других браузерах.

Callback-функция, для создания объекта XMLHttpRequest. Создав свою функцию, вы берёте на себя всю ответственность за формирование объекта.

xhrFields

Объект вида для изменения значений соответствующих полей объекта XMLHttpRequest.

$.ajax( < url: a_cross_domain_url, xhrFields: < withCredentials: true >>);

(добалено в версии 1.5.1)

Примеры

Сохранить данные на сервере и оповестить об этом пользователя.

$.ajax( < type: «POST», url: «some.php», data: < name: «John», location: «Boston» >>).done(function( msg ) < alert( «Data Saved: » + msg ); >);

Получить последнюю версию HTML страницы

$.ajax(< url: «test.html», cache: false >).done(function( html ) < $(«#results»).append(html); >);

Передаём в качестве данных XML документ. Отключаем автоматическую конвертацию данных в обычную строку, задав настройке processData значение false :

var xmlDocument = [create xml document]; var xmlRequest = $.ajax(< url: «page.php», processData: false, data: xmlDocument >); xmlRequest.done(handleResponse);

Отправить на сервер значение ID. Сохранить данные, оповестить пользователя. Если запрос не прошёл, сообщить об этом пользователю.

var menuId = $(«ul.nav»).first().attr(«id»); var request = $.ajax(< url: «script.php», type: «POST», data: , dataType: «html» >); request.done(function(msg) < $(«#log»).html( msg ); >); request.fail(function(jqXHR, textStatus) < alert( «Request failed: » + textStatus ); >);

Загрузить и выполнить файл JavaScript:

$.ajax(< type: «GET», url: «test.js», dataType: «script» >);

Источник: ruseller.com

Как поймать сообщение об ошибке Ajax-запроса?

Я хотел бы поймать ошибку и показать соответствующее сообщение, если запрос Ajax терпит неудачу.

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

function getAjaxData(id) < $.post(«status.ajax.php», , function(data)< var tab1; if (data.length>0) < tab1 = data; >else < tab1 = «Error in Ajax»; >return tab1; >); >

я узнал, что» ошибка в Ajax » никогда не выполняется, когда запрос Ajax не удался.

Как я могу обработать ошибку Ajax и показать соответствующее сообщение, если это не удастся?

автор: Peter Mortensen

6 ответов

начиная с jQuery 1.5 вы можете использовать механизм отложенных объектов:

$.post(‘some.php’, ) .done(function(msg)< >) .fail(function(xhr, status, error) < // error handling >);

другой способ-использовать .ajax :

$.ajax(< type: «POST», url: «some.php», data: «name=John, success: function(msg)< alert( «Data Saved: » + msg ); >, error: function(XMLHttpRequest, textStatus, errorThrown) < alert(«some error»); >>);
автор: choise

jQuery 1.5 добавил отложенные объекты, которые прекрасно справляются с этим. Просто позвоните $.post и прикрепите любые обработчики, которые вы хотите после вызова. Отложенные объекты даже позволяют присоединить несколько обработчиков успеха и ошибок.

$.post(‘status.ajax.php’, ) .done( function(msg) < . >) .fail( function(xhr, textStatus, errorThrown) < alert(xhr.responseText); >);

до jQuery 1.8 функция done называлась success и fail называлась error .

автор: Michael Venable

$.ajax(< type: ‘POST’, url: ‘status.ajax.php’, data: < deviceId: id >, success: function(data)< // your code from above >, error: function(xhr, textStatus, error) < console.log(xhr.statusText); console.log(textStatus); console.log(error); >>);
автор: jAndy
$.post(‘someUri’, < >, function(data)< doSomeStuff >) .fail(function(error) < alert(error.responseJSON) >);
автор: marknery

всякий раз, когда запрос Ajax завершается с ошибкой jQuery запускает событие ajaxError. Все обработчики которые были зарегистрированы в .метод ajaxError() выполняется при эта пора.

$(‘.log’).ajaxError(function() < $(this).text(‘Triggered ajaxError handler.’); >);

Я бы предложил чтение ajaxError документация. Он делает больше чем просто use-case продемонстрированный выше-главным образом свое обратный вызов принимает ряд параметров:

$(‘.log’).ajaxError(function(e, xhr, settings, exception) < if (settings.url == ‘ajax/missing.html’) < $(this).text(‘Triggered ajaxError handler.’); >>);
автор: karim79

я исправил эту проблему путем объявления datatype: ‘json’ в моем вызове jQuery ajax.

Источник: askdev.ru

AJAX запрос. Почему срабатывает функция ошибки?

Почему не срабатывает Ajax запрос?
Добрый день! Не пойму почему не срабатыват запрос. <form method=»POST».

Не срабатывает ajax запрос
По нажатию на кнопку нужно обновить содержимое блока: <div onClick=»taskreload();.

не срабатывает Ajax запрос
Пытаюсь сделать следущее: с помощю PHP взять некую информацию с сайта. Т.е. есть поле ввода, ввожу.

Ajax: почему не срабатывает состояние success?
Приветствую всех! Помогите понять почему не срабатывает состояние success! Есть код //.

810 / 481 / 108
Регистрация: 28.05.2012
Сообщений: 1,518
Записей в блоге: 2

ну так может в самом articlejs.php какие-то ошибки? в результате ответ не приходит от сервера и ajax обрбатывает запрос как ошибку.

Регистрация: 04.06.2013
Сообщений: 1,532

ну так может в самом articlejs.php какие-то ошибки? в результате ответ не приходит от сервера и ajax обрбатывает запрос как ошибку.

Сервер отвечает

echo «»rez»: «Успешно»>»;
810 / 481 / 108
Регистрация: 28.05.2012
Сообщений: 1,518
Записей в блоге: 2

посмотрите через хром ответ сервера: правой клавишей «просмотреть код элемента» и далее вкладка Network, после это сделайте действие которое вызывает ваш ajax запрос

и если вы отправляете в формате json, то надо получать его так:

alert(data.rez);
Регистрация: 04.06.2013
Сообщений: 1,532

посмотрите через хром ответ сервера: правой клавишей «просмотреть код элемента» и далее вкладка Network, после это сделайте действие которое вызывает ваш ajax запрос

Что странно что type text/html

810 / 481 / 108
Регистрация: 28.05.2012
Сообщений: 1,518
Записей в блоге: 2
ну все пришло. значит должно работать. Что пишется в алерте?

Регистрация: 04.06.2013
Сообщений: 1,532

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
$(‘#button_save’).click(function() { var text = $(‘#text’).

val(); $.ajax({type:»POST», dataType:»json», url:»articlejs.php», data:{text:text,a:a}, success: function (data) { $(‘#text’).val(»); alert(data.

rez); }, error: function(XMLHttpRequest, textStatus, errorThrown) { $(‘#text’).val(‘ERROR’+ XMLHttpRequest +» «+ errorThrown) alert(textStatus);}, }); });
сделал как Вы сказали но функция ошибки по прежнему срабатывает

810 / 481 / 108
Регистрация: 28.05.2012
Сообщений: 1,518
Записей в блоге: 2

Что пишется в алерте?

и также посмотрите через браузер что пришло от сервера (кликните по articlejs.php)

Регистрация: 04.06.2013
Сообщений: 1,532
Что пишется в алерте?
Алерт «ошибки»
и также посмотрите через браузер что пришло от сервера (кликните по articlejs.php)
901 / 833 / 198
Регистрация: 28.06.2012
Сообщений: 1,607
Записей в блоге: 4

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
$(‘#button_save’).click(function() { var text = $(‘#text’).val(); $.ajax({type:»POST», dataType:»json», url:»articlejs.php», data:{text:text,a:a}, success: function (data) { $(‘#text’).val(»); alert(data.rez); }, error: function(XMLHttpRequest, textStatus, errorThrown) { $(‘#text’).val(‘ERROR’+ XMLHttpRequest +» «+ errorThrown) alert(textStatus);}, }); });
В строке 5 — что за а? Выдаёт синтаксическую ошибку и не число и не строка
$(‘#text’).val(‘ERROR’+ XMLHttpRequest +» «+ errorThrown)

XMLHttpRequest — это объект, зачем помещать его val ?

1 2 3
$res[‘rez’]=»успешно»; echo json_encode($res);?>
Всё работает.
Регистрация: 04.06.2013
Сообщений: 1,532
В строке 5 — что за а?
var a = location.search;
XMLHttpRequest — это объект, зачем помещать его val ?
Просто такЯ же только учусь
901 / 833 / 198
Регистрация: 28.06.2012
Сообщений: 1,607
Записей в блоге: 4
Почему не делаете как Вам говорят, а упорно гнёте свою линию
Делайте вот так
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
html> head> title>ajaxError/title> meta http-equiv=»Content-Type» content=»text/html; charset=windows-utf-8″ /> script src=»http://code.jquery.com/jquery-latest.js»>/script> script type=»text/javascript»> $(document).ready(function()< $(‘#button_save’).click(function() < var text = $(‘#text’).val(); $.ajax(, success: function (data) < $(‘#text’).val(»); alert(data.rez); >, error: function(XMLHttpRequest, textStatus, errorThrown) < $(‘#text’).val(‘ERROR = ‘+ errorThrown); alert(textStatus); >>); >); >);/*end ready*/ /script> /head> body > input type=»text» id=»text» size=»40″ value=»748″ > input type=»button» value=»Отправка» id=»button_save»> /body> /html>
articlejs.php
1 2 3
$res[‘rez’]=»успешно»; echo json_encode($res);?>
Регистрация: 04.06.2013
Сообщений: 1,532

Зачем a в кавычках.

Добавлено через 3 минуты

Почему не делаете как Вам говорят, а упорно гнёте свою линию

А Вы объясните где ошибка в моем коде, а потом уже предлагайте свой. Моя ошибка мне более интересна. Тем более что у Вас то же скорее всего ошибка

alert(data.rez);
Не работает
901 / 833 / 198
Регистрация: 28.06.2012
Сообщений: 1,607
Записей в блоге: 4
В том коде, что Вы выложили, нет изначально
var a = location.search;

Чтобы небыло ошибки я передаю букву ‘a’ — это, в данном случае не суть важно, данные всё равно не обрабатываются в articlejs.php

Регистрация: 04.06.2013
Сообщений: 1,532
В том коде, что Вы выложили, нет изначально

Просто думал что это не столь важно

данные всё равно не обрабатываются в articlejs.php

Они обрабатываются и записываются в базу данных на сервере(articlejs.php я тоже не весь код выложил) только вот что то с ajaxом наверно

901 / 833 / 198
Регистрация: 28.06.2012
Сообщений: 1,607
Записей в блоге: 4
alert(data.rez);
Не работает
Работает
Перейдите по ссылке
в примере PHP такой

1 2 3
$res[‘rez’]=»успешно»; echo json_encode($res);?>
Вот тоже самое, но PHP уже такой:
echo «»rez»: «Успешно»>»;?>
А Вы объясните где ошибка в моем коде,
Так объяснили вроде
Регистрация: 04.06.2013
Сообщений: 1,532

И вы хотите сказать что проблемы из за ответа сервера?

Добавлено через 11 минут

Вот тоже самое, но PHP уже такой:
Код PHP
1
2
echo «»;?>
если PHP такое то нужно добавить обработчик который разберет строку JSON например JSON.parse()
Регистрация: 04.06.2013
Сообщений: 1,532
Вот весь PHP. МОжет это как то поможет

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
header(‘content-type: application/x-javascript; charset=utf-8′); if (((isset($_COOKIE[’email’]) and isset($_COOKIE[‘password’])) or (isset($_SESSION[‘password’]) and isset($_SESSION[’email’]))) and isset($_POST[‘a’])) { include(«baza/baza1.php»); $q=$_POST[‘a’]; $a = strlen($q); $b = $a -3; $qsu = substr($q, -$b, $b); $emailc = $_COOKIE[’email’]; $passwordc=$_COOKIE[‘password’]; $emails = $_SESSION[’email’]; $passwords = $_SESSION[‘password’]; $rezult = mysql_query(«SELECT id FROM noteusers WHERE email=’$emailc’ AND password=’$passwordc’ OR email=’$emails’ AND password=’$passwords’»,$db); $myrow = mysql_fetch_array($rezult); $id = $myrow[‘id’]; //добавить коментрий if (isset($_POST[‘text’]) and isset($_POST[‘a’])) { $text=$_POST[‘text’]; $rezultatv = mysql_query(«INSERT INTO commentsartcles (autor,articleid,text) VALUES (‘$id’,$qsu,’$text’)»); echo json_encode(array(‘rez’=>’done’)); exit(); } //голосовать за стаью if (isset($_POST[‘param’])) { $param=$_POST[‘param’]; $rezultat = mysql_query(«INSERT INTO votearticles (articlesid,user,vote) VALUES ($qsu,’$id’,’$param’)»); } } ?>
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Почему не срабатывает функция
у меня в одном файле на удаление много много функция.. одна из них должна удалять собщения функция.

Почему не срабатывает функция .next()?
Всем привет, помогите понять, чего не срабатывает жКверивская функция .next() window.setPercents.

Почему не срабатывает функция TRIM?
Добрый день! Есть запрос, в котором происходит запись в курсор айдишника(work_id) и значения.

Почему не срабатывает SQL запрос в VBA?
Уже второй час сижу с ним — не могу понять проблемы. Смотрите: var = Me.ИД_Пользователя Set rst.

Источник: www.cyberforum.ru

Ошибка при отправке ajax-запроса

Мое первое беспокойство, могу ли я отправить более одного предложения о местоположении?
второй
Во-вторых, почему ошибка в этой конкретной строке?

Заранее спасибо за помощь.

Решение

Вы объявляете свои переменные правильно. Var — это языковая конструкция, которая объявляет следующее как переменную. Либо измените код, чтобы использовать точки с запятой в конце каждого оператора var следующим образом:

var value_0 = $(‘input[name=nome]’).val(); var value_1 = $(‘input[name=email]’).val();

или удалите все, кроме первого оператора var, следующим образом:

var value_0 = $(‘input[name=nome]’).val(), value_1 = $(‘input[name=email]’).val(), value_2 = $(‘input[name=contacto]’).val();

Другие решения

Других решений пока нет …

Источник: web-answers.ru

jQuery Ajax — события успеха и ошибки

Использовать будем $.ajax(), перед тем как писать скрипт, не забываем подключать jQuery.
Основа нашего скрипта будет выглядеть так:

$(‘.price-table’).on(‘click’, ‘.btn-item-add’, function()< $.ajax(<>); return false; >);

В данном коде мы видим, что по клику на кнопку с классом .btn-item-add, у которой кстати должен быть родитель с классом .price-table, мы вызываем аякс (пока что безе параметров для более простого понимания). return false — дописываем на случай если наша кнопка сделана через тег .

Теперь добавим события и базовые параметры:

//AJAX ADD TO CART $(‘.price-table’).on(‘click’, ‘.btn-item-add’, function()< var $id = $(this).data(‘id’), $thisBut = $(this), $count = $(this).prev(‘.quant-block’).find(‘.pr-item-quant’).val(); $.ajax(< url: ‘/include/ajax_cart.php’, type: ‘get’, cache: false, data: ‘id=’+$id+’).done(function(data)< //смотрим какой ответ отправляется в случае успеха console.log(data); >).complete(function()< // после того как аякс выполнился >).error(function()< // пишем ошибку в консоль если что-то пошло не так console.log(‘There was an error’); >); return false; >);

В самом начале добавились параметры, а для аякса прописали параметры: url, type, cache и data. Обратите внимание что мы передаем параметры, а в PHP $_GET в дальнейшем можно их обработать. Ссылку указываем относительно корня сайта.

Для примера у нас есть 3 jQuery события — done, complete и error. Отличие done от complete лишь в том что done вызывается первым. Таким образом мы можем в первой функции выполнить запрос, а во второй делать что душе угодно .

Как вызвать 2 аякса подряд при помощи jQuery

Рассмотрим код посложнее. По клику у нас появляется прелоадер по середине экрана.

//AJAX ADD TO CART $(‘.price-table’).on(‘click’, ‘.btn-item-add’, function() ‘); var $id = $(this).data(‘id’), $thisBut = $(this), $count = $(this).prev(‘.quant-block’).find(‘.pr-item-quant’).val(); $.ajax(< url: ‘/include/ajax_cart.php’, type: ‘get’, cache: false, data: ‘id=’+$id+’).done(function(data)< $(‘#bid4’).html(data); >).complete(function()< $.ajax(< url: ‘/include/ajax_cart_big.php’, type: ‘get’, cache: false, data: false, >).done(function(data)< $(‘#bid2’).html(data); >); $(‘.ajax-preload’).remove(); $(‘body’).append(‘Товар добавлен в корзину’); $(‘.tooltip’).animate(< top: ’20px’ >, 1500).fadeOut(1500); >).error(function()< console.log(‘There was an error’); >); return false; >);

Затем наши знакомые параметры ($id, $thisBut, $count). В функции .complete записываем вызов еще одного ajax запроса. Также убираем наш прелоадер. Таким образом можно выиграть немного времени при загрузке данных.

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

UPDATE 23.10.2018

Как передать файл через ajax:

Источник: forwww.com

Содержание

  1. Handling Ajax errors with jQuery.
  2. JQuery 3.0: The error, success and complete callbacks are deprecated.
  3. One thought on “ Handling Ajax errors with jQuery. ”
  4. AJAX: Шпаргалка по AJAX на jQuery
  5. Стандартная отправка данных через Ajax.
  6. Отправка POST запроса через Ajax
  7. Отправка JSON данных через Ajax
  8. Запланировать выполнение JS скрипта
  9. Сокращённые виды функций для Ajax запросов
  10. Обработка ошибок связанных с AJAX запросом
  11. 7 Основные параметры для работы с AJAX функциями
  12. Как использовать AJAX в PHP и jQuery
  13. Что такое AJAX?
  14. Как AJAX работает с использованием Vanilla JavaScript
  15. Как работает AJAX с использованием библиотеки jQuery
  16. Реальный пример AJAX с PHP
  17. Заключение

Handling Ajax errors with jQuery.

This is a tutorial on how to handle errors when making Ajax requests via the jQuery library. A lot of developers seem to assume that their Ajax requests will always succeed. However, in certain cases, the request may fail and you will need to inform the user.

Here is some sample JavaScript code where I use the jQuery library to send an Ajax request to a PHP script that does not exist:

If you look at the code above, you will notice that I have two functions:

  • success: The success function is called if the Ajax request is completed successfully. i.e. If the server returns a HTTP status of 200 OK. If our request fails because the server responded with an error, then the success function will not be executed.
  • error: The error function is executed if the server responds with a HTTP error. In the example above, I am sending an Ajax request to a script that I know does not exist. If I run the code above, the error function will be executed and a JavaScript alert message will pop up and display information about the error.

The Ajax error function has three parameters:

In truth, the jqXHR object will give you all of the information that you need to know about the error that just occurred. This object will contain two important properties:

  • status: This is the HTTP status code that the server returned. If you run the code above, you will see that this is 404. If an Internal Server Error occurs, then the status property will be 500.
  • statusText: If the Ajax request fails, then this property will contain a textual representation of the error that just occurred. If the server encounters an error, then this will contain the text “Internal Server Error”.

Obviously, in most cases, you will not want to use an ugly JavaScript alert message. Instead, you would create an error message and display it above the Ajax form that the user is trying to submit.

JQuery 3.0: The error, success and complete callbacks are deprecated.

Update: As of JQuery 3.0, the success, error and complete callbacks have all been removed. As a result, you will have to use the done, fail and always callbacks instead.

An example of done and fail being used:

Note that always is like complete, in the sense that it will always be called, regardless of whether the request was successful or not.

Hopefully, you found this tutorial to be useful.

One thought on “ Handling Ajax errors with jQuery. ”

thanks its helpful 🙂 many of us not aware of error block in ajax

Источник

AJAX: Шпаргалка по AJAX на jQuery

Всем привет в новой записи мы с вами разберём основные функции для Ajax запросов, которые позволяют передавать информацию с сайта в PHP скрипт без перезагрузки страницы.

Для работы Ajax запросов вам нужно подключить jQuery к вашему проекту. Ссылку на jQuery вы можете найти здесь.

Данный взяты с моего сайта Prog-Time.

Стандартная отправка данных через Ajax.

Отправка POST запроса через Ajax

Для отправки POST запроса используем подобный код, меняем только параметр method

Отправка JSON данных через Ajax

Для отправки JSON данный через AJAX можно использовать только методом GET.

Запланировать выполнение JS скрипта

После выполнения данного запроса, скрипт указанный в параметре url сразу будет выполнен.

Сокращённые виды функций для Ajax запросов

Сокращённая версия запроса на выполнение JS скрипта

Обработка ошибок связанных с AJAX запросом

7 Основные параметры для работы с AJAX функциями

Все параметры для отправки AJAX запросов

async (по умолчанию: true).Тип: Boolean.По умолчанию, все запросы отправляются асинхронно и не задерживают работу других JS скриптов (это значение true), для того чтобы ждать пока выполниться Ajax запрос – поставьте значение false.Обратите внимание, что кроссдоменные запросы и элемент, параметр dataType которого имеет значение “jsonp” не поддерживают запросы в синхронном режиме. Учтите, что используя синхронные запросы вы можете временно заблокировать браузер отключив какие-либо действия пока запрос будет активен.

beforeSendФункция обратного вызова, которая будет вызвана перед осуществлением AJAX запроса. Функция позволяет изменить объект jqXHR (в jQuery 1.4.х объект XMLHTTPRequest) до его отправки. Объект jqXHR это надстройка расширяющая объект XMLHttpRequest, объект содержит множество свойств и методов, которые позволяет получить более полную информацию об ответе сервера, а так же объект содержит Promise методы. Если функция beforeSend возвращает false, то AJAX запрос будет отменен. Начиная с версии jQuery 1.5 функция beforeSend будет вызываться независимо от типа запроса.

cache (по умолчанию: true, для dataType “script” и “jsonp” false).Тип: Boolean.Если задано значение false, то это заставит запрашиваемые страницы не кэшироваться браузером. Обратите внимание, что значение false будет правильно работать только с HEAD и GET запросами.

complete.Тип: Function( jqXHR jqXHR, String textStatus ).Функция, которая вызывается, когда запрос заканчивается (функция выполняется после AJAX событий “success” или “error”). В функцию передаются два параметра: jqXHR (в jQuery 1.4.х объект XMLHTTPRequest) и строка соответствующая статусу запроса (“success”, “notmodified”, “nocontent”, “error”, “timeout”, “abort”, или “parsererror”). Начиная с версии jQuery 1.5 параметр complete может принимать массив из функций, которые будут вызываться по очереди.

contents.Тип: PlainObject.Объект состоящий из пар строка/регулярное выражение, определяющих, как jQuery будет обрабатывать (парсить) ответ в зависимости от типа содержимого. Добавлен в версии jQuery 1.5.

contentType (по умолчанию: “application/x-www-form-urlencoded; charset=UTF-8”).Тип: Boolean, или String.Определяет тип содержимого, которое указывается в запросе при передаче данных на сервер. С версии с jQuery 1.6 допускается указать значение false, в этом случае jQuery не передает в заголовке поле Content-Type совсем.

context.Тип: PlainObject.При выполнении AJAX функций обратного вызова контекстом их выполнения является объект window. Параметр context позволяет настроить контекст исполнения функции таким образом, что $( this ) будет ссылаться на определенный DOM элемент, или объект.

crossDomain (по умолчанию: false для запросов внутри того же домена, true для кроссдоменных запросов).Тип: Boolean.Если вы хотите сделать кроссдоменный запрос находясь на том же домене (например jsonp-запрос), то установите этот параметр в true. Это позволит, к примеру, сделать перенаправление запроса на другой домен с вашего сервера. Добавлен в версии jQuery 1.5.

data.Тип: PlainObject, или String, или Array.Данные, которые будут отправлены на сервер. Если они не является строкой, то преобразуются в строку запроса. Для GET запросов строка будет добавлена к URL. Для того, чтобы предотвратить автоматическую обработку вы можете воспользоваться параметром processData со значением false. Если данные передаются в составе объекта, то он должен состоять из пар ключ/значение. Если значение является массивом, то jQuery сериализует несколько значений с одним и тем же ключом (в зависимости от значения параметра traditional, который позволяет задействовать традиционный тип сериализации основанный на методе $.param).

dataFilter.Тип: Function( String data, String type ) => Anything.Функция вызывается после успешного выполнения AJAX запроса и позволяет обработать “сырые” данные, полученные из ответа сервера. Возврат данных должен происходить сразу после их обработки. Функция принимает два аргумента: data – данные полученные от сервера в виде строки и type – тип этих данных (значение параметра dataType).

dataType (по умолчанию: xml, json, script, или html ).Тип: String.Определяет тип данных, который вы ожидаете получить от сервера. Если тип данных не указан, то jQuery будет пытаться определить его на основе типа MIME из ответа (XML тип MIME приведет к получению XML, с версии jQuery 1.4 json будет давать объект JavaScript, script будет выполнять скрипт, а все остальное будет возвращено в виде строки).Основные типы (результат передается в качестве первого аргумента в функцию обратного вызова success):

“xml” – возвращает XML документ, который может быть обработан с помощью jQuery.

“html” – возвращает HTML как обычный текст, теги

Источник

Как использовать AJAX в PHP и jQuery

Сегодня мы собираемся исследовать концепцию AJAX с PHP. Техника AJAX помогает вам улучшить пользовательский интерфейс вашего приложения и улучшить общее восприятие конечного пользователя.

Что такое AJAX?

AJAX расшифровывается как асинхронный JavaScript и XML и позволяет асинхронно извлекать контент с внутреннего сервера без обновления страницы. Таким образом, он позволяет обновлять содержимое веб-страницы без перезагрузки.

Давайте рассмотрим пример, чтобы понять, как вы можете использовать AJAX в повседневной разработке приложений. Скажем, вы хотите создать страницу, которая отображает информацию профиля пользователя, с различными разделами, такими как личная информация, социальная информация, уведомления, сообщения и так далее.

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

С другой стороны, вы также можете использовать AJAX для создания интерфейса, который загружает всю информацию без обновления страницы. В этом случае вы можете отобразить разные вкладки для всех разделов, и, нажав на вкладку, он извлекает соответствующее содержимое с внутреннего сервера и обновляет страницу, не обновляя браузер. Это поможет вам улучшить общее восприятие конечного пользователя.

Общий вызов AJAX работает примерно так:

Давайте быстро пройдемся по обычному потоку AJAX:

  1. Сначала пользователь, как обычно, открывает веб-страницу синхронным запросом.
  2. Затем пользователь нажимает на элемент DOM — обычно кнопку или ссылку — который инициирует асинхронный запрос к серверу. Конечный пользователь не заметит этого, поскольку вызов выполняется асинхронно и не обновляет браузер. Однако вы можете распознать эти AJAX-вызовы с помощью такого инструмента, как Firebug.
  3. В ответ на запрос AJAX сервер может вернуть данные строки XML, JSON или HTML.
  4. Данные ответа анализируются с использованием JavaScript.
  5. Наконец, проанализированные данные обновляются в DOM веб-страницы.

Итак, как вы можете видеть, веб-страница обновляется данными в реальном времени с сервера без перезагрузки браузера.

В следующем разделе мы расскажем, как реализовать AJAX с использованием ванильного JavaScript.

Как AJAX работает с использованием Vanilla JavaScript

В этом разделе мы увидим, как AJAX работает в обычном JavaScript. Конечно, есть доступные библиотеки JavaScript, которые облегчают выполнение AJAX-вызовов, но всегда интересно знать, что происходит внутри.

Давайте посмотрим на следующий ванильный код JavaScript, который выполняет вызов AJAX и асинхронно получает ответ от сервера.

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

  1. Сначала мы инициализируем объект XMLHttpRequest , который отвечает за выполнение вызовов AJAX.
  2. У объекта XMLHttpRequest есть свойство readyState , и значение этого свойства изменяется в течение жизненного цикла запроса. Оно может содержать одно из четырех значений: OPENED , HEADERS_RECEIVED , LOADING и DONE .
  3. Мы можем настроить функцию-обработчик для изменений состояния, используя свойство onreadystatechange . И это то, что мы сделали в приведенном выше примере: мы использовали функцию, которая будет вызываться каждый раз при изменении свойства состояния.
  4. В этой функции мы проверили, равно ли значение readyState 4 , что означает, что запрос завершен, и мы получили ответ от сервера. Затем мы проверили, равен ли код состояния 200 , что означает, что запрос был успешным. Наконец, мы получаем ответ, который хранится в свойстве responseText объекта XMLHttpRequest .
  5. После настройки обработчика мы инициируем запрос, вызывая метод open объекта XMLHttpRequest . Значение свойства readyState будет установлено равным 1 после этого вызова.
  6. Наконец, мы вызвали метод send объекта XMLHttpRequest , который фактически отправляет запрос на сервер. Значение свойства readyState будет установлено равным 2 после этого вызова.
  7. Когда сервер отвечает, он в конечном итоге установит значение readyState равным 4, и вы должны увидеть окно предупреждения, отображающее ответ от сервера.

Вот как AJAX работает с ванильным JavaScript. Конечно, это был очень простой пример для демонстрации концепции AJAX, и в реальном приложении все может быть довольно сложно, так как вам нужно обработать многие различные сценарии успеха и неудач. Таким образом, было бы неплохо выбрать библиотеку JavaScript, которая скрывает специфические сложности браузера!

В следующем разделе мы увидим, как использовать библиотеку jQuery для выполнения вызовов AJAX.

Как работает AJAX с использованием библиотеки jQuery

В предыдущем разделе мы обсуждали, как можно выполнять вызовы AJAX, используя ванильный JavaScript. В этом разделе мы будем использовать библиотеку jQuery, чтобы продемонстрировать это. Я предполагаю, что вы знаете основы библиотеки jQuery.

Библиотека jQuery предоставляет несколько различных методов для выполнения вызовов AJAX, хотя здесь мы рассмотрим стандартный метод ajax , который используется чаще всего.

Посмотрите на следующий пример.

Как вы уже знаете, знак $ используется для ссылки на объект jQuery.

Первым параметром метода ajax является URL-адрес, который будет вызываться в фоновом режиме для получения содержимого со стороны сервера. Второй параметр имеет формат JSON и позволяет указывать значения для некоторых различных параметров, поддерживаемых методом ajax .

В большинстве случаев вам нужно будет указывать функции обратного вызова (коллбеки) для успешного выполнения и для ошибок. Функция обратного вызова для успеха будет вызвана после успешного завершения вызова AJAX. Ответ, возвращенный сервером, будет передан коллбеку для успеха. С другой стороны, коллбек для ошибки будет вызван, если что-то пойдет не так, и возникла проблема при выполнении вызова AJAX.

Итак, как вы можете видеть, AJAX-операции легко выполнять с помощью библиотеки jQuery. Фактически, процесс более или менее одинаков, независимо от библиотеки JavaScript, с которой вы решаете выполнять вызовы AJAX.

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

Реальный пример AJAX с PHP

В этом разделе мы создадим пример, который извлекает контент JSON из файла PHP на стороне сервера, используя AJAX.

Для демонстрации мы создадим пример, который выполняет вход пользователя с использованием AJAX и jQuery. Для начала давайте создадим файл index.php, как показано в следующем фрагменте, который отображает базовую форму входа.

Файл index.php представляет собой довольно стандартную HTML-форму, которая содержит поля имени пользователя и пароля. Он также содержит фрагмент JavaScript jQuery, который следует схеме, которую мы видели выше.

Мы использовали событие submit элемента формы, которое будет срабатывать, когда пользователь нажимает кнопку отправки. В этом обработчике событий мы инициировали вызов AJAX, который отправляет данные формы в файл login.php, используя метод POST асинхронно. Получив ответ от сервера, мы анализируем его, используя метод parse объекта JSON . И наконец, основываясь на успехе или неудаче, мы предпринимаем соответствующие действия.

Давайте также посмотрим, как выглядит login.php.

Файл login.php содержит логику аутентификации пользователей и возвращает ответ JSON, основанный на успешном или неудачном входе в систему.

Заключение

В этом уроке мы обсудили основы AJAX и его работу в PHP. В первой половине статьи мы рассмотрели, как AJAX работает в ванильном JS и в библиотеке jQuery. Во второй половине мы создали реальный пример, который продемонстрировал, как вы можете использовать AJAX для извлечения PHP содержимого на стороне сервера.

Если у вас есть какие-либо сомнения или вопросы, не стесняйтесь выражать свои мысли, используя канал ниже!

Источник

При работе над веб-приложениями программисту легко попасть в ловушку: разрабатывать и тестировать только понятные сценарии, в которых всё происходит правильно. К сожалению, в реальности встречаются ситуации, в которых всё идёт не так, как планировалось. Обработка ошибок — важная часть пользовательского опыта любого приложения. Если приложение реагирует на ошибки правильно, ваши пользователи будут знать, что делать дальше, даже если что-то идёт не так.

  • Обработка ошибок в бэкенд- и фронтенд-приложениях: в чём разница
  • Как правильно обрабатывать ошибки
  • Как работать с ошибками в AJAX-запросах и что нужно знать о кодах ответа HTTP
  • Как перехватывать ошибки во фронтенд-приложениях
  • Главное об обработке ошибок во фронтенд-приложениях

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

Ошибки ввода

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

Ошибки авторизации

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

Ошибки доступности

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

Неожиданные ошибки

Это ошибки, которые обычно говорят о багах в приложении, например, о необработанных исключениях.

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

Примечание — тема обработки ошибок во фронтенд-приложениях подробно рассматривается в рамках профессии «Фронтенд-программист». Базовые курсы в этой профессии, включая «Введение в программирование», «Основы командной строки», «Настройка окружения», «Системы контроля версий», доступны бесплатно после регистрации.

Обработка ошибок в бэкенд- и фронтенд-приложениях: в чём разница

Обработка ожидаемых ошибок в бэкенде веб-приложений обычно происходит так: приложение отвечает сообщением об ошибке или отображает это сообщение пользователю. Неожиданные ошибки ломают нормальный процесс ответа и приводят к отображению общей страницы ошибки.

Плохо настроенные приложения могут даже показывать конечному пользователю информацию о внутренних ошибках. В большинстве случаев бэкенд-приложения не очень хорошо помогают человеку справиться с ошибкой и вернуться к нормальному использованию приложения. Но они хорошо справляются с задачей информирования пользователя об ошибках.

У фронтенд-приложений нет встроенного механизма, позволяющего остановить работу и показать сообщение об ошибке. После возникновения ошибки в JavaScript обычно происходит одно из описанных ниже событий:

  • Приложение работает, но не выполняет действий, которые ожидает пользователь. Самая распространённая реакция пользователей в такой ситуации — попробовать ещё раз в надежде, что в этот раз приложение поведёт себя ожидаемо.
  • Приложение останавливается, но не сообщает об остановке пользователю. Здесь пользователь повторит действие или попробует выполнить новое действие, но у него ничего не получится.
  • Если ошибка происходит достаточно рано, пользователь может увидеть белый экран из-за неудачной попытки приложения отобразить страницу.

Все эти сценарии ужасные с точки зрения пользовательского опыта. Они могут разочаровать пользователя, заставить его чувствовать беспомощность и даже злость. Фронтенд-приложения во многом более гибкие в плане обработки ошибок по сравнению с бэкенд-приложениями. Но позаботиться об обработке ошибок должны разработчики, так как встроенные в браузеры инструменты практически бесполезны для конечных пользователей.

Читайте полезную статью
Что такое магические числа в программировании и как снять это заклятие.

Как правильно обрабатывать ошибки

Есть много способов обработки ошибок в JavaScript-приложениях. Вы можете определить глобальный обработчик ошибок, который будет отображать переданные в него сообщения. Также вы можете построить приложение так, чтобы каждый его компонент самостоятельно обрабатывал ошибки, которые в нём возникают.

Один из простых способов обработки ошибок заключается в том, чтобы создать общую схему для реакции на все ошибки и использовать систему событий браузеров, чтобы перехватывать всплывающие ошибки и обрабатывать их. Например, ошибку валидации формы можно перехватить на элементе form или соответствующем инпуте и показать пользователю сообщение об этой ошибке. А нераспознанная системная ошибка может всплыть на уровень document. В этом случае пользователь увидит обобщённое сообщение об ошибке.

Взаимодействие с пользователем при возникновении ошибки играет очень важную роль. Вы должны сообщить человеку, что пошло не так, а также объяснить, что делать дальше. В целом, сообщения могут иметь такой смысл:

  • Измените что-то и повторите действие. Если пользователь ввёл невалидные данные и не смог отправить форму, благодаря сообщению об ошибке он сможет исправить данные и отправить форму.
  • Попробуйте позже. Пользователь не смог отправить форму из-за ошибки сети. Благодаря сообщению он вернётся через 10 минут и успешно отправит форму.
  • Свяжитесь с нами. Пользователь не смог отправить форму из-за неожиданной ошибки. Благодаря сообщению об ошибке он свяжется со службой поддержки и решит свои задачи.

При обработке ошибок на стороне клиента часто возникает необходимость выбрать между остановкой и продолжением работы приложения. Если ошибка влияет только на часть системы, можно разрешить человеку пользоваться приложением дальше. Если ошибка критическая или она влияет на разные части приложения, можно показать сообщение в модальном окне, которое невозможно закрыть. Также можно заменить контент страницы сообщением об ошибке. Это защитит пользователя от бесполезных попыток выполнить желаемое действие.

Как работать с ошибками в AJAX-запросах и что нужно знать о кодах ответа HTTP

Самый простой и очень эффективный способ сообщить пользователю об ошибке — правильно использовать коды ответов HTTP. Коды статуса HTTP могут самостоятельно дать пользователю достаточно информации о том, почему возникла ошибка запроса, а также подсказать, что делать дальше.

«Ошибочные» коды ответов HTTP объединяются в две группы: ответы 4XX и ответы 5XX. Первые говорят о проблеме с запросом (клиентские ошибки), а вторые — о проблеме с сервером (серверные ошибки). Ниже перечислены самые распространённые «ошибочные» коды статусов HTTP, которые можно получить при работе с веб-приложением:

  • 400 — Bad Request. Обычно этот статус связан с ошибкой ввода, например, если пользователь вводит некорректный адрес электронной почты.
  • 401 — Unauthorized. Этот статус связан с ситуацией, когда пользователь пытается получить доступ к чему-либо без авторизации там, где авторизация требуется. Также этот код ошибки подходит в ситуации, когда пользователь пытается выполнить действие, на которое у него нет прав.
  • 403 — Forbidden. Разница между этим статусом и статусом 400 незначительная. Обычно код 403 говорит о том, что сервер понял запрос, но не может его выполнить. Например, такой статус можно возвращать, если пользователь ввёл номер акционного купона с истекшим сроком действия.
  • 404 — Not Found. Это самый известный из «ошибочных» кодов ответа. Он сообщает, что запрошенный ресурс не найден. Это может произойти из-за некорректного URL, удалённой или перемещённой страницы.
  • 409 — Conflict. В большинстве случаев этот статус говорит о конфликте управления версиями. Например, такое происходит, если пользователь пробует загрузить версию файла, которая старше загруженной ранее версии этого файла. Также этот код может говорить об ограничениях уникальности, например, если пользователь пытается повторно отправить электронное письмо (второй раз нажимает кнопку «Отправить», не дождавшись завершения действия).
  • 500 — Internal Server Error. Этот статус говорит об ошибке, которую можно описать так: «Что-то пошло не так, но мы не знаем, что именно».
  • 503 — Unavailable. Сервер вышел из строя, ошибка может быть запланированной или незапланированной.

Если вы хорошо знаете эти коды, вам будет проще обрабатывать ошибки, которые возникают при работе с AJAX-запросами.

Примечание — Обратите внимание на сервис httpstat.us, он пригодится вам для тестирования реакций на ошибки при разработке фронтенд-приложений.

Как перехватывать ошибки во фронтенд-приложениях

Вы можете определить обработчик глобально с помощью функции window.onerror. В этом случае обработчик переопределит дефолтное поведение браузеров, благодаря чему ваше приложение будет показывать пользователям полезную информацию при возникновении ошибок.

window.onerror = (message, url, lineNumber) => {
  // определяем, знаем ли мы, как обрабатывать ошибку
  if (errorCanBeHandled) {
    // показываем сообщение об ошибке пользователю
    displayErrorMessage(message);
    // возвращаем true и запускаем дефолтную
    // реакцию приложения на фатальные ошибки
    return true;
  } else {
    // запускаем дефолтную обработку ошибок браузером
    return false;
  }
}

Этот подход работает. Но иногда бывает сложно понять точную причину проблемы с помощью выброшенного исключения. При обработке ошибок в AJAX-запросах лучше использовать функцию обработки ошибок библиотеки, которой вы пользуетесь для выполнения запросов. Она позволит определить код ответа и корректно на него среагировать.

Изучайте фронтенд-разработку на Хекслете! Первые курсы в профессии «Фронтенд-программист» доступны бесплатно. Регистрируйтесь и стартуйте в удобное время.

Главное об обработке ошибок во фронтенд-приложениях

Главный факт об обработке ошибок заключается в том, что вы должны их обрабатывать. Любая попытка сообщить пользователю что-то полезное, когда возникает ошибка — отличный ход. Даже информирование с помощью alert() лучше, чем отсутствие информации. Помните, что при проектировании UI вашего приложения нужно учитывать все возможные ситуации, включая различные ошибки.

Адаптированный перевод статьи Front-End Error Handling by Static Apps. Мнение администрации Хекслета может не совпадать с мнением автора оригинальной публикации.

Ошибка означает, что на запрос AJAX (т.е. отложенная загрузка) был возвращен недопустимый ответ. Обычно это вызвано ошибкой или конфликтом AJAX в вашей теме или другом плагине, который мешает выводу запроса AJAX.

Оператор RxJS ajax() — это оператор создания, используемый для создания наблюдаемого для запроса Ajax либо с объектом запроса с URL-адресом, заголовками и т. д., либо со строкой для URL-адреса. Другими словами, мы можем сказать, что оператор RxJS ajax() делает запрос ajax для данного URL-адреса. Мы должны сначала импортировать ajax для работы с ним.

Когда есть ответ об ошибке AJAX или время ожидания запроса AJAX, вы захотите зарегистрировать столько информации, сколько у вас есть, включая сообщение об ошибке, которое дает вам jQuery, URL-адрес и данные запроса. $. ajax(url, { «data»: requestData, «type»: «POST», «timeout»: 5000 }) .

На объекте Rx есть оператор ajax.

Angular более общий, тогда как AJAX более конкретный. Другими словами, Angular — это большая структура, тогда как AJAX — это метод JavaScript, обеспечивающий асинхронную связь между базой данных и сервером. Angular использует технологию AJAX для создания одностраничных приложений.

AjaxError

interfacestable

Возникает при возникновении ошибки во время запроса AJAX. Это экспортируется только потому, что это полезно для проверки того, является ли ошибка instanceof AjaxError . НЕ создавайте новые экземпляры AjaxError с помощью конструктора.

interface AjaxError extends Error {
  xhr: XMLHttpRequest
  request: AjaxRequest
  status: number
  responseType: XMLHttpRequestResponseType
  response: any
}

Properties

Property Type Description
xhr XMLHttpRequest

Экземпляр XHR,связанный с ошибкой.

request AjaxRequest

AjaxRequest,связанный с ошибкой.

status number

Код состояния HTTP, если запрос выполнен. В противном случае устанавливается значение 0 .

responseType XMLHttpRequestResponseType

Тип ответа (например,’json’,’arraybuffer’ или ‘xml’).

response any

Ответные данные.

See Also

  • ajax


RxJS

7.5

RxJS Documentation
RxJS — это библиотека для создания асинхронных и событийных программ с использованием наблюдаемых последовательностей.
ajax
const stable На объекте Rx есть оператор ajax.
AjaxResponse
класс stable Нормализованный ответ на запрос AJAX.
AjaxTimeoutError
интерфейс стабильный Вызывается по истечении времени ожидания запроса AJAX.

This is a tutorial on how to handle errors when making Ajax requests via the jQuery library. A lot of developers seem to assume that their Ajax requests will always succeed. However, in certain cases, the request may fail and you will need to inform the user.

Here is some sample JavaScript code where I use the jQuery library to send an Ajax request to a PHP script that does not exist:

$.ajax({
     url: 'does-not-exist.php',
     success: function(returnData){
         var res = JSON.parse(returnData);
     },
     error: function(xhr, status, error){
         var errorMessage = xhr.status + ': ' + xhr.statusText
         alert('Error - ' + errorMessage);
     }
});

If you look at the code above, you will notice that I have two functions:

  • success: The success function is called if the Ajax request is completed successfully. i.e. If the server returns a HTTP status of 200 OK. If our request fails because the server responded with an error, then the success function will not be executed.
  • error: The error function is executed if the server responds with a HTTP error. In the example above, I am sending an Ajax request to a script that I know does not exist. If I run the code above, the error function will be executed and a JavaScript alert message will pop up and display information about the error.

The Ajax error function has three parameters:

  • jqXHR
  • textStatus
  • errorThrown

In truth, the jqXHR object will give you all of the information that you need to know about the error that just occurred. This object will contain two important properties:

  • status: This is the HTTP status code that the server returned. If you run the code above, you will see that this is 404. If an Internal Server Error occurs, then the status property will be 500.
  • statusText: If the Ajax request fails, then this property will contain a textual representation of the error that just occurred. If the server encounters an error, then this will contain the text “Internal Server Error”.

Obviously, in most cases, you will not want to use an ugly JavaScript alert message. Instead, you would create an error message and display it above the Ajax form that the user is trying to submit.

JQuery 3.0: The error, success and complete callbacks are deprecated.

Update: As of JQuery 3.0, the success, error and complete callbacks have all been removed. As a result, you will have to use the done, fail and always callbacks instead.

An example of done and fail being used:

$.ajax("submit.php")
  .done(function(data) {
      //Ajax request was successful.
  })
  .fail(function(xhr, status, error) {
      //Ajax request failed.
      var errorMessage = xhr.status + ': ' + xhr.statusText
      alert('Error - ' + errorMessage);
})

Note that always is like complete, in the sense that it will always be called, regardless of whether the request was successful or not.

Hopefully, you found this tutorial to be useful.

Забудьте про javascript alert! Все сообщения пользователю должны быть оформлены в соответствии с темой оформления вашего сайта. Никаких системных окон. Пользователи их боятся.

В друпал 7 есть замечательный AJAX Framework. Но разработчики сделали, что все ошибки в его работе (а они могут случиться на ровном месте), вываливаются на пользователя в виде javascript alert окна.

На английском это сообщение выглядит так:

An AJAX HTTP request terminated abnormally.
Debugging information follows.
Path: /system/ajax
StatusText:
ResponseText:
ReadyState: 4

Такая ошибка часто появляется, когда ajax запрос еще продолжается (сервер делает какую-нить долгую работу), крутится индикатор работы, а пользователь нажал на ссылку на странице, чтобы с нее уйти.

Я придерживаюсь внутреннего убеждения, что выводить сообщения для пользователя с помощью alert’ов — это моветон. Они некрасивые, они выглядят по-разному в разных браузерах и операционных системах и они пугают пользователя. В общем один негатив.

Именно поэтому, мы все алерты будем выводить в консоль браузера (если она есть).

Для этого в любой javascript файл (например в нашей drupal теме или в собственном модуле) добавляем следующую строчку:

window.alert = function(arg) { if (window.console && console.log) { console.log(arg);}};

Этим мы переопределяем javascript функцию alert и говорим ей, что вместо создания окна с кнопкой, нужно все писать в консоль.

This function basically generates unique random API key’s and in case if it doesn’t then pop-up dialog box with error message appears

In View Page:

<div class="form-group required">
    <label class="col-sm-2 control-label" for="input-storename"><?php echo $entry_storename; ?></label>
    <div class="col-sm-6">
        <input type="text" class="apivalue"  id="api_text" readonly name="API" value="<?php echo strtoupper(substr(md5(rand().microtime()), 0, 12)); ?>" class="form-control" />                                                                    
        <button type="button" class="changeKey1" value="Refresh">Re-Generate</button>
    </div>
</div>

<script>
$(document).ready(function(){
    $('.changeKey1').click(function(){
          debugger;
        $.ajax({
                url  :"index.php?route=account/apiaccess/regenerate",
                type :'POST',
                dataType: "json",
                async:false,
                contentType: "application/json; charset=utf-8",
                success: function(data){
                  var result =  data.sync_id.toUpperCase();
                        if(result){
                          $('#api_text').val(result);
                        }
                  debugger;
                  },
                error: function(xhr, ajaxOptions, thrownError) {
                  alert(thrownError + "rn" + xhr.statusText + "rn" + xhr.responseText);
                }

        });
    });
  });
</script>

From Controller:

public function regenerate(){
    $json = array();
    $api_key = substr(md5(rand(0,100).microtime()), 0, 12);
    $json['sync_id'] = $api_key; 
    $json['message'] = 'Successfully API Generated';
    $this->response->addHeader('Content-Type: application/json');
    $this->response->setOutput(json_encode($json));
}

The optional callback parameter specifies a callback function to run when the load() method is completed. The callback function can have different parameters:

Type: Function( jqXHR jqXHR, String textStatus, String errorThrown )

A function to be called if the request fails.
The function receives three arguments: The jqXHR (in jQuery 1.4.x, XMLHttpRequest) object, a string describing the type of error that occurred and an optional exception object, if one occurred. Possible values for the second argument (besides null) are «timeout», «error», «abort», and «parsererror». When an HTTP error occurs, errorThrown receives the textual portion of the HTTP status, such as «Not Found» or «Internal Server Error.» As of jQuery 1.5, the error setting can accept an array of functions. Each function will be called in turn. Note: This handler is not called for cross-domain script and cross-domain JSONP requests.

This function basically generates unique random API key’s and in case if it doesn’t then pop-up dialog box with error message appears

In View Page:

<div class="form-group required">
    <label class="col-sm-2 control-label" for="input-storename"><?php echo $entry_storename; ?></label>
    <div class="col-sm-6">
        <input type="text" class="apivalue"  id="api_text" readonly name="API" value="<?php echo strtoupper(substr(md5(rand().microtime()), 0, 12)); ?>" class="form-control" />                                                                    
        <button type="button" class="changeKey1" value="Refresh">Re-Generate</button>
    </div>
</div>

<script>
$(document).ready(function(){
    $('.changeKey1').click(function(){
          debugger;
        $.ajax({
                url  :"index.php?route=account/apiaccess/regenerate",
                type :'POST',
                dataType: "json",
                async:false,
                contentType: "application/json; charset=utf-8",
                success: function(data){
                  var result =  data.sync_id.toUpperCase();
                        if(result){
                          $('#api_text').val(result);
                        }
                  debugger;
                  },
                error: function(xhr, ajaxOptions, thrownError) {
                  alert(thrownError + "rn" + xhr.statusText + "rn" + xhr.responseText);
                }

        });
    });
  });
</script>

From Controller:

public function regenerate(){
    $json = array();
    $api_key = substr(md5(rand(0,100).microtime()), 0, 12);
    $json['sync_id'] = $api_key; 
    $json['message'] = 'Successfully API Generated';
    $this->response->addHeader('Content-Type: application/json');
    $this->response->setOutput(json_encode($json));
}

The optional callback parameter specifies a callback function to run when the load() method is completed. The callback function can have different parameters:

Type: Function( jqXHR jqXHR, String textStatus, String errorThrown )

A function to be called if the request fails.
The function receives three arguments: The jqXHR (in jQuery 1.4.x, XMLHttpRequest) object, a string describing the type of error that occurred and an optional exception object, if one occurred. Possible values for the second argument (besides null) are «timeout», «error», «abort», and «parsererror». When an HTTP error occurs, errorThrown receives the textual portion of the HTTP status, such as «Not Found» or «Internal Server Error.» As of jQuery 1.5, the error setting can accept an array of functions. Each function will be called in turn. Note: This handler is not called for cross-domain script and cross-domain JSONP requests.

AJAX позволяет отправить и получить данные без перезагрузки страницы. Например, делать проверку форм, подгружать контент и т.д. А функции JQuery значительно упрощают работу.

Полное описание функции AJAX на jquery.com.

1

GET запрос

Запрос идет на index.php с параметром «text» и значением «Текст» через метод GET.
По сути это то же самое что перейти в браузере по адресу – http://site.com/index.php?text=Текст

В результате запроса index.php вернет строку «Данные приняты – Текст», которая будет выведена в сообщении alert.

$.ajax({
	url: '/index.php',         /* Куда пойдет запрос */
	method: 'get',             /* Метод передачи (post или get) */
	dataType: 'html',          /* Тип данных в ответе (xml, json, script, html). */
	data: {text: 'Текст'},     /* Параметры передаваемые в запросе. */
	success: function(data){   /* функция которая будет выполнена после успешного запроса.  */
		alert(data);            /* В переменной data содержится ответ от index.php. */
	}
});

JS

Код можно сократить используя функцию $.get

$.get('/index.php', {text: 'Текст'}, function(data){
	alert(data);
});

JS

Код файла index.php

echo 'Данные приняты - ' . $_GET['text'];

PHP

GET запросы могут кэшироваться браузером или сервером, чтобы этого избежать нужно добавить в функцию параметр – cache: false.

$.ajax({
	url: '/index.php',
	method: 'get',
	cache: false
});

JS

2

POST запросы

$.ajax({
	url: '/index.php',
	method: 'post',
	dataType: 'html',
	data: {text: 'Текст'},
	success: function(data){
		alert(data);
	}
});

JS

Или сокращенная версия – функция $.post

$.post('/index.php', {text: 'Текст'}, function(data){
	alert(data);
});

JS

Код файла index.php

echo 'Данные приняты - ' . $_POST['text'];

PHP

POST запросы ни когда не кэшироваться.

3

При отправке формы применяется функция serialize(), подробнее на jquery.com.

Она обходит форму и собирает названия и заполненные пользователем значения полей и возвращает в виде массива – {login: 'ЗНАЧЕНИЯ_ПОЛЯ', password: 'ЗНАЧЕНИЯ_ПОЛЯ'}.

Особенности serialize():

  • Кнопки формы по которым был клик игнорируются, в результате функции их не будет.
  • serialize можно применить только к тегу form и полям формы, т.е. $('div.form_container').serialize(); – вернет пустой результат.

Пример отправки и обработки формы:

<div class="form_container">
	<div id="message"></div>
	<form id="form">
		<input type="text" name="login">
		<input type="text" name="password">
		<input type="submit" name="send" value="Отправить">
	</form>
</div>

<script>
$("#form").on("submit", function(){
	$.ajax({
		url: '/handler.php',
		method: 'post',
		dataType: 'html',
		data: $(this).serialize(),
		success: function(data){
			$('#message').html(data);
		}
	});
});
</script>

HTML

Код файла handler.php

if (empty($_POST['login'])) {
	echo 'Укажите логин';
} elseif (empty($_POST['password'])) {
	echo 'Укажите пароль';
} else {
	echo 'Авторизация...';
}

PHP

4

Работа с JSON

Идеальный вариант когда нужно работать с массивами данных.

$.ajax({
	url: '/json.php',
	method: 'get',
	dataType: 'json',
	success: function(data){
		alert(data.text);    /* выведет "Текст" */
		alert(data.error);   /* выведет "Ошибка" */
	}
});

JS

Короткая версия

$.getJSON('/json.php', function(data) {
	alert(data.text);
	alert(data.error);
});

JS

$.getJSON передает запрос только через GET.

Код файла json.php

header('Content-Type: application/json');

$result = array(
	'text'  => 'Текст',
	'error' => 'Ошибка'
);

echo json_encode($result);

PHP

Возможные проблемы

При работе с JSON может всплыть одна ошибка – после запроса сервер отдал результат, все хорошо, но метод success не срабатывает. Причина кроется в серверной части (PHP) т.к. перед данными могут появится управляющие символы, например:

Управляющие символы в ответе JSON

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

В таких случаях помогает очистка буфера вывода ob_end_clean (если он используется на сайте).

...

// Очистка буфера
ob_end_clean(); 
		
header('Content-Type: application/json');
echo json_encode($result, JSON_UNESCAPED_UNICODE);
exit();

PHP

5

Выполнение JS загруженного через AJAX

В JQuery реализована функция подгруздки кода JS через AJAX, после успешного запроса он будет сразу выполнен.

$.ajax({
	method: 'get',
	url: '/script.js',
	dataType: "script"
});

JS

Или

$.getScript('/script.js');

JS

6

По умолчанию в JQuery AJAX запросы выполняются асинхронно. Т.е. запрос не задерживает выполнение программы пока ждет результатов, а работает параллельно.

Простой пример:

var text = '';

$.ajax({
	url: '/index.php',
	method: 'get',
	dataType: 'html',
	success: function(data){
		text = data;
	}
});

alert(text);  /* Переменная будет пустая. */

JS

Переменная text будет пустая, а не как ожидается текст который вернул index.php

Чтобы включить синхронный режим нужно добавить параметр async: false.
Соответственно синхронный запрос будет вешать прогрузку страницы если код выполняется в <head> страницы.

var text = '';

$.ajax({
	url: '/index.php',
	method: 'get',
	dataType: 'html',
	async: false,
	success: function(data){
		text = data;
	}
});

alert(text); /* В переменной будет результат из index.php. */

JS

7

Отправка HTTP заголовков

Через AJAX можно отправить заголовки HEAD, они указываются в параметре headers.

$.ajax({
	url: '/index.php',
	method: 'get',
	dataType: 'html',
	headers: {'Token_value': 123},
	success: function(data){
		console.dir(data);
	}
});

JS

В PHP они будут доступны в массиве $_SERVER, ключ массива переводится в верхний регистр с приставкой HTTP_, например:

<?php
echo $_SERVER['HTTP_TOKEN_VALUE']; // 123

PHP

8

Обработка ошибок

Через параметр error задается callback-функция, которая будет вызвана в случаи если запрашиваемый ресурс отдал 404, 500 или другой код.

$.ajax({
	url: '/index.php',
	method: 'get',
	dataType: 'json',
	success: function(data){
		console.dir(data);
	},
	error: function (jqXHR, exception) {
		if (jqXHR.status === 0) {
			alert('Not connect. Verify Network.');
		} else if (jqXHR.status == 404) {
			alert('Requested page not found (404).');
		} else if (jqXHR.status == 500) {
			alert('Internal Server Error (500).');
		} else if (exception === 'parsererror') {
			alert('Requested JSON parse failed.');
		} else if (exception === 'timeout') {
			alert('Time out error.');
		} else if (exception === 'abort') {
			alert('Ajax request aborted.');
		} else {
			alert('Uncaught Error. ' + jqXHR.responseText);
		}
	}
});

JS

Через $.ajaxSetup можно задать обработчик ошибок для всех AJAX-запросов на сайте.

$.ajaxSetup({
	error: function (jqXHR, exception) {
		...
	}
});

JS

Добрый вечер дорогие форумчане. Подскажите пожалуйста, почему при попытке отправить ajax запрос, у меня выскакивает alert из error??? Всю голову уже сломал, весь интернет уже перерыл.
2) И почему после того как я нажимаю ок в alert у меня перезагружается страница??

шаблон

{% extends "crm/main_struct.html" %}
{% load staticfiles %}

{% block content %}

<!--ОБЯЗАТЕЛЬНО СДЕЛАТЬ ФУНКЦИЮ НА JS КОТОРАЯ БУДЕТ ВЫЧИСЛЯТЬ ОТСТУПЫ И В НУЖНОЕ МЕСТО ПИХАТЬ КОНТЕНТ САЙТОВ-->
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>

<script>
$(document).ready(function() {
  $('ul.tabs_m_w').each(function() {
    $(this).find('li').each(function(i) {
      $(this).click(function() {
        $(this).addClass('active').siblings().removeClass('active');
        var p = $(this).parents('div.tabs_container_m_w');
        p.find('div.tab_container_m_w').hide();
        p.find('div.tab_container_m_w:eq(' + i + ')').show();
      });
    });
  });
})
</script>
<a href="{{url}}/crm/my_work/new/" class="add_notebook_a">
    <div class="add_notebook">Добавить</div>
</a>
<div class="tabs_container_m_w">
  <ul class="tabs_m_w">
      {% for notebook in notebookList %}
        <li class="inl-bl_m_w">
            <div class="m_w_list_head">{{notebook.name}}</div>
            <div class="m_w_list_date">{{notebook.date_firstly}}</div>
            <div class="m_w_list_kr_info">{{notebook.kr_info}}</div>
        </li>
      {% endfor %}
  </ul>

    {% for notebook in notebookList %}
  <div class="tab_container_m_w">
      <a href="" onclick="resend({{notebook.id}});" class="a_tab">
          <div class="m_w_save">
            Сохранить
          </div>
      </a>
    <div class="m_w_info_head" id="name{{notebook.id}}" contentEditable="true">{{notebook.name}}</div>
      <div class="m_w_info_info" id="info{{notebook.id}}" contentEditable="true">{{notebook.information}}</div>
  </div>
{% endfor %}

</div>

<script>
    function resend(pk){
           var name = document.getElementById('name' + pk).innerHTML.trim().replace(/<.*?>/g, "");
           var info = document.getElementById('info' + pk).innerHTML.trim().replace(/<.*?>/g, "");
           edit(name, info, pk);
    }
</script>

<script>
function edit(name, info, pk) {
// Если поля заполнены, отправляем их значения
        $.ajax({
            error: function() {
                alert('Ошибка получения запроса');
            },
    // При успехе очищаем поля и меняем кнопочку
                success: function(data) {
                 alert("Успех"); // для проверки, что скрипт работает
                },
    // CSRF механизм защиты Django
                beforeSend: function(xhr, settings) {
                    console.log('-------------before send--');
                    function getCookie(name) {
                        var cookieValue = null;
                        if (document.cookie && document.cookie != '') {
                            var cookies = document.cookie.split(';');
                            for (var i = 0; i < cookies.length; i++) {
                                var cookie = jQuery.trim(cookies[i]);
                                // Does this cookie string begin with the name we want?
                            if (cookie.substring(0, name.length + 1) == (name + '=')) {
                                cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                                break;
                            }
                        }
                    }
                    return cookieValue;
                    }
                    if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) {
                        // Only send the token to relative URLs i.e. locally.
                        xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));
                    }
                }
            });// ajax


        return false;
    };
</script>
{% endblock %}

urls.py

urlpatterns = patterns('',
    url(r'^my_work/edit/$', views.NBEdit, name='crm_edit_NB'),
)

views.py

def NBEdit(request):
    if request.is_ajax():
        for i in MyDela.objects.filter(pk=request.POST.get("id", "")):
            i.name = request.POST.get("name", "")[:250]
            i.information = request.POST.get("info", "")
            i.save()
        #  return HttpResponse("ok")
        return HttpResponseRedirect('/crm/sites/')
    else:
        #  return HttpResponse("bad")
        return HttpResponseRedirect('/crm/zayvki/')

Прошу не кидаться помидорами, я только учусь кодить))

This is a tutorial on how to handle errors when making Ajax requests via the jQuery library. A lot of developers seem to assume that their Ajax requests will always succeed. However, in certain cases, the request may fail and you will need to inform the user.

Here is some sample JavaScript code where I use the jQuery library to send an Ajax request to a PHP script that does not exist:

$.ajax({
     url: 'does-not-exist.php',
     success: function(returnData){
         var res = JSON.parse(returnData);
     },
     error: function(xhr, status, error){
         var errorMessage = xhr.status + ': ' + xhr.statusText
         alert('Error - ' + errorMessage);
     }
});

If you look at the code above, you will notice that I have two functions:

  • success: The success function is called if the Ajax request is completed successfully. i.e. If the server returns a HTTP status of 200 OK. If our request fails because the server responded with an error, then the success function will not be executed.
  • error: The error function is executed if the server responds with a HTTP error. In the example above, I am sending an Ajax request to a script that I know does not exist. If I run the code above, the error function will be executed and a JavaScript alert message will pop up and display information about the error.

The Ajax error function has three parameters:

  • jqXHR
  • textStatus
  • errorThrown

In truth, the jqXHR object will give you all of the information that you need to know about the error that just occurred. This object will contain two important properties:

  • status: This is the HTTP status code that the server returned. If you run the code above, you will see that this is 404. If an Internal Server Error occurs, then the status property will be 500.
  • statusText: If the Ajax request fails, then this property will contain a textual representation of the error that just occurred. If the server encounters an error, then this will contain the text “Internal Server Error”.

Obviously, in most cases, you will not want to use an ugly JavaScript alert message. Instead, you would create an error message and display it above the Ajax form that the user is trying to submit.

JQuery 3.0: The error, success and complete callbacks are deprecated.

Update: As of JQuery 3.0, the success, error and complete callbacks have all been removed. As a result, you will have to use the done, fail and always callbacks instead.

An example of done and fail being used:

$.ajax("submit.php")
  .done(function(data) {
      //Ajax request was successful.
  })
  .fail(function(xhr, status, error) {
      //Ajax request failed.
      var errorMessage = xhr.status + ': ' + xhr.statusText
      alert('Error - ' + errorMessage);
})

Note that always is like complete, in the sense that it will always be called, regardless of whether the request was successful or not.

Hopefully, you found this tutorial to be useful.

Ошибка означает, что на запрос AJAX (т.е. отложенная загрузка) был возвращен недопустимый ответ. Обычно это вызвано ошибкой или конфликтом AJAX в вашей теме или другом плагине, который мешает выводу запроса AJAX.

Оператор RxJS ajax() — это оператор создания, используемый для создания наблюдаемого для запроса Ajax либо с объектом запроса с URL-адресом, заголовками и т. д., либо со строкой для URL-адреса. Другими словами, мы можем сказать, что оператор RxJS ajax() делает запрос ajax для данного URL-адреса. Мы должны сначала импортировать ajax для работы с ним.

Когда есть ответ об ошибке AJAX или время ожидания запроса AJAX, вы захотите зарегистрировать столько информации, сколько у вас есть, включая сообщение об ошибке, которое дает вам jQuery, URL-адрес и данные запроса. $. ajax(url, { «data»: requestData, «type»: «POST», «timeout»: 5000 }) .

  • При отправке ajax запроса произошла ошибка fun pay
  • При отображении проверки готовности произошла непредвиденная ошибка league of legends
  • При открытии эксель выдает ошибку при направлении команды приложению
  • При открытии фотографии пишет ошибка файловой системы 2147219196
  • При открытии флешки выдает ошибку