Jquery ajax не работает success

на jQuery.функция обратного вызова ajax success не выполнена

У меня есть вызов JavaScript Ajax (jQuery.ajax), который не выполняет функцию обратного вызова успеха.

Я вижу в firebug, что запрос разнесен и правильный результат с точки зрения json возвращается, как ожидалось. Что случилось?

6 ответов

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

кроме того, я хотел бы спросить, используете ли вы параметр типа «&jsoncallback=?»в вашем url, так как ваш тип данных-jsonp вместо простого json.

код $.ajax вызов с dataType: ‘jsonp’ может работать в этих сценариях:

  1. вы вызываете url-адрес в том же домене вашей страницы.
  2. вы вызываете url из вашего домена вашей страницы, которая поддерживает обратный звонок

Если вы находитесь вне этих двух случаев, вы ничего не можете сделать, так как вы не можете делать перекрестные вызовы XMLHttpRequest сайта.

необходимо задать свойству async значение false.

Это старый вопрос, но я подозреваю, что люди все-таки попаду.

Я боролся с этим некоторое время, и в конце концов сдался и перешел к отложенной модели. (Я использую jQuery достаточно долго, чтобы я все еще был в «старых» привычках. Как только я перешел на отложенную модель, все начало работать. Я понятия не имею, почему старый способ не сработал, но мне уже все равно. (Этот вопрос предшествует новой модели.)

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

мы могли видеть, как выполняется вызов ajax, и могли видеть, что правильный ответ возвращается в Fiddler (статус 200 / полностью действительный JSON), но он никогда не попадет в ошибку, успех или полные обратные вызовы. Добавление async: false к вызову ajax заставит его работать, но это не было действительно правильным решением. Кроме того, размещение предупреждения непосредственно после вызова ajax (без async: false), и ожидание нескольких секунд после того, как предупреждение было показано, каким-то образом заставит обратные вызовы ajax работать . Очень странно.

оказывается, функция с вызовом ajax была привязана к входу типа= «submit», который был источником этого странного поведения. Изменение ввода на type= «button» исправило его.

Читайте также:  Установил виндовс не работает вай фай

jQuery Ajax вызов сервлета с параметрами mutliple не вызывал успех или ошибку, хотя вызов был успешным. Он был привязан к кнопке отправки. Изменение его вернуло событие успеха.

вот мой код в случае, если кому-то он нужен для справки.

Источник

Почему не срабатывает success когда ajax-ом отправляю данные?

На страничке имеется яваскрипт, который парсит нужные элементы и закидывает это дело в объект

все нормально отрабатывает в консоли подготовленный объект выглядит так

только если полностью убрать вывод данных из обработчика, тогда срабатывает success
что за прикол? никак не разберусь

  • Вопрос задан более трёх лет назад
  • 533 просмотра

Должно быть так:

А вообще еще лучше сделать очистку вывода перед echo, чтобы случайно ни один лишний символ не попал в вывод — формат json достаточно строгий и даже лишний пробел приведет к ошибке.

Почему не срабатывает success когда ajax-ом отправляю данные?

$data = json_decode($_POST[‘arrObjects’], true);
echo json_encode($data);
спасибо так действительно работает, нужно было возвращать JSON

проверил
все отправляет/получает

но, на самом деле мне нужно было заставить отрабатывать скрипт, который формирует docx файл
из данных, которые пришли в пост массиве

это как то по другому делается? 🙂

заставить отрабатывать скрипт, который формирует docx файл
из данных, которые пришли в пост массиве

Источник

Почему не срабатывает success в ajax запросе?

Встретился с проблемой, что не работает «success», сам ajax вроде работает, данные отправляются на обработчик.
javascript:

  • Вопрос задан более трёх лет назад
  • 11658 просмотров

@Norbyt попробуйте выполнить запрос (я заменил строками значения переменных)

Я намеренно убрал указание типа получаемого контента. Выполнили, посмотрели консоль, сделали вывод.
Если сработал success, добавляем dataType: ‘json’ и выполняем, смотрим консоль.

Пишем сюда и потом думаем, что и как.

@Norbyt вы точно делали то, что я написал? Проблему нужно искать, уменьшая проблемный код. Если вам требуется DOMContentLoaded, то это значит, что вы продолжаете тестировать посторонний проблемный код. Так можно долго ковыряться.

Ещё раз — создайте пустой документ и в нём выполните ровно то, что я просил.
ПыСы. $(document).ready() => $()

@Norbyt ничего вы не забыли. Уберите. Срочно.
Аргументом метода click (и всех методов для работы с событиями) может быть только функция, а не результат её работы. То есть срабатывает click, и только тогда запускается RunAjax.

Это значит, что ошибка осталась в коде.

ПыСы. И зачем вы называете свои ошибки позорными? Это — моя работа, а вы делаете её за меня:)) Шучу. Я их так тоже не называю.

Читайте также:  Life after настроить управление

Источник

Ajax success event not working

I have a registration form and am using $.ajax to submit it.

This is my AJAX request:

In my submit1.php file I check for the existence of fields email address and username in the database. I wish to display an error message if those value exist without a page refresh.

How can I add this to the success callback of my AJAX request?

16 Answers 16

The result is probably not in JSON format, so when jQuery tries to parse it as such, it fails. You can catch the error with error: callback function.

You don’t seem to need JSON in that function anyways, so you can also take out the dataType: ‘json’ row.

Although the problem is already solved i add this in the hope it will help others.

I made the mistake an tried to use a function directly like this (success: OnSuccess(productID)). But you have to pass an anonymous function first:

If you do not use an anonymous function as a wrapper OnSuccess is called even if the webservice returns an exception.

I tried removing the dataType row and it didn’t work for me. I got around the issue by using «complete» instead of «success» as the callback. The success callback still fails in IE, but since my script runs and completes anyway that’s all I care about.

in jQuery 1.5 you can also do it like this.

Make sure you’re not printing (echo or print) any text/data prior to generate your JSON formated data in your PHP file. That could explain that you get a -sucessfull 200 OK- but your sucess event still fails in your javascript. You can verify what your script is receiving by checking the section «Network — Answer» in firebug for the POST submit1.php.

Put an alert() in your success callback to make sure it’s being called at all.

If it’s not, that’s simply because the request wasn’t successful at all, even though you manage to hit the server. Reasonable causes could be that a timeout expires, or something in your php code throws an exception.

Install the firebug addon for firefox, if you haven’t already, and inspect the AJAX callback. You’ll be able to see the response, and whether or not it receives a successful (200 OK) response. You can also put another alert() in the complete callback, which should definitely be invoked.

Читайте также:  Что делать если мой сервер самп не работает

I had same problem. it happen because javascript expect json data type in returning data. but if you use echo or print in your php this situation occur. if you use echo function in php to return data, Simply remove dataType : «json» working pretty well.

Источник

$ .ajax не будет работать внутри функции

У меня возникли проблемы с этой функцией с помощью jquery’s ajax. По сути, эта функция проверяет API, чтобы узнать, является ли переменная «success» истинной. Если это так, я хочу, чтобы эта функция возвращала true. Если успех ложен, я хочу, чтобы он возвратил ложь.

Этот код фактически находится в документе (myjs.js и т. Д.) И вызывается в html-файле ПОСЛЕ jquery и ДО того, как функция фактически вызывается. У меня есть скрипт скрипт в HTML, где эта функция вызывается. Вот:

Я добавил console.log(loggedIn()); в теги скрипта, но он возвращается неопределенным.

Любая помощь была бы признательна.

5 ответов

Используя все ответы, я смог объединить (в основном ответ Терри) их, чтобы найти решение, которое работает. (Спасибо за все ответы, кстати!). Это файл myjs.js:

Это страница скрипта, я добавил () после loggedIn, и все, кажется, работает отлично:

JQuery ajax, внутренне вызывает объект xhr браузера, который обрабатывается браузером асинхронно, следовательно, элемент управления, который вы вызываете при вызове функции loggedIn , переходит, все, что он делает, это регистрирует запрос ajax, который делает браузер отдельно к серверу.

Измените вашу функцию, чтобы принять обратный вызов, как показано ниже:

И назовите это так:

Если ваш контроллер / api / auth возвращает объект JSON со свойством success поля данных, вы можете использовать внешнюю переменную. Задайте для параметра async значение false , чтобы предотвратить асинхронное выполнение.

Но синхронный AJAX настоятельно не рекомендуется (см. Подробности в документации). Вместо этого вы можете отправить любую функцию в loggedIn в качестве параметра для ее выполнения, если запрос на авторизацию выполнен успешно. Например:

Вы не можете вернуть результат вызова ajax . Вы должны поместить свою логику в функцию обратного вызова success . Также вы можете использовать Promise based подход

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

Вместо этого вам нужно проверить значение, когда обещание, возвращенное из асинхронного запроса, будет разрешено. Вот что вы можете сделать:

Источник

Оцените статью