Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 31.08.2015, 11:27
Профессор
Отправить личное сообщение для Эдди Посмотреть профиль Найти все сообщения от Эдди
 
Регистрация: 19.06.2010
Сообщений: 279

Повторное обращение к php вызывает двойной ответ
На странице форма и кнопка Отправить.
Заполняю форму. При помощи ajax запрашиваю данные из php-скрипта.
Получаю результат в массиве. Далее:
if(data) //данные с сервера получены
              {
                //Здесь вывожу результат в таблице
              }

При этом форма не перезагружается, что и требуется.
Однако если повторно нажать на кнопку отправить,
Выводится уже две таблицы с результатами.
Еще раз нажать - три таблицы и так далее.
Причем если в форме что-то изменить, то несколько раз выводятся уже новые результаты.

На событии нажатие на кнопку отправить у меня очищаются прошлые результаты методом empty().
Пробовал обнулить полученный массив:
data=0;
и
data.lenght=0;
Опять то же самое.

Что такое происходит?
Ответить с цитированием
  #2 (permalink)  
Старый 31.08.2015, 11:30
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,118

Сообщение от Эдди
Что такое происходит?
Просто так работает твой скрипт. Если не устраивает - измени его как тебе нужно...
Ответить с цитированием
  #3 (permalink)  
Старый 31.08.2015, 11:54
Профессор
Отправить личное сообщение для Эдди Посмотреть профиль Найти все сообщения от Эдди
 
Регистрация: 19.06.2010
Сообщений: 279

Сообщение от ksa Посмотреть сообщение
Просто так работает твой скрипт. Если не устраивает - измени его как тебе нужно...
Так проблему искать в js или php? В php все в порядке.
Отдает корректный массив.

А с js я не так хорошо знаком. HELP
Ответить с цитированием
  #4 (permalink)  
Старый 31.08.2015, 15:02
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Эдди
Так проблему искать в js или php?
Трудно сказать, нужно приводить описание ситуации, данные запроса и ответа, а иначе гадать никто не станет.

Если JS, то проверить... Если очищается ранее полученное, только не data.lenght=0;, это вообще абсурд, а html (у меня очищаются прошлые результаты методом empty()), то причиной ошибки может быть только следующее - несколько запросов к серверу, а соответственно и вывод полученного на страницу.

Проверить это просто - F12 и смотрим в отладчике количество запросов. Такое поведение может вызвано, например, неудачным назначением обработчика события, или кодом самого обработчика.

Если с запросами клиента все ОК, то РНР, то при каждом последующем запросе сервер будет выдавать дублированные данные, что также легко выявить в отладчике. Такое может быть вызвано, например параметрами запроса, если они есть.

Так что анализируйте.
Ответить с цитированием
  #5 (permalink)  
Старый 01.09.2015, 22:13
Профессор
Отправить личное сообщение для Эдди Посмотреть профиль Найти все сообщения от Эдди
 
Регистрация: 19.06.2010
Сообщений: 279

Спасибо за подсказки. Эту ошибку я оставлю на конечную отладку.
Попробую хотя бы методом исключения.

Последний раз редактировалось Эдди, 01.09.2015 в 22:18.
Ответить с цитированием
  #6 (permalink)  
Старый 16.09.2015, 17:33
Профессор
Отправить личное сообщение для Эдди Посмотреть профиль Найти все сообщения от Эдди
 
Регистрация: 19.06.2010
Сообщений: 279

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

У меня так:
//search - это id инпута submit
$('#search').click(function (e)
{
  //Здесь проводились всевозможные проверки на заполненность полей и прочее, а потом идет:
  //Все данные верны:
  $('form:first').submit(function()
  {
    //и здесь главный ajax запрос, выводящий данные на страницу
  }
}

И вопрос, чтобы весь "многотонный скрипт" не переделывать,
может быть можно как нибудь первый обработчик изменить,
чтобы он не мешал второму?
Первый на самом деле важен, после него идет много всякого.
Если что-то не заполнено, производятся вычисления, другие ajax запросы и пр.
Или один вариант - засунуть его после submit. Но это будет большой геморрой переделывать.
Ответить с цитированием
  #7 (permalink)  
Старый 16.09.2015, 18:53
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Зачем это $('#search').click если есть это $('form:first').submit? Выбрасывайте первое и меняйте логику.
Ответить с цитированием
  #8 (permalink)  
Старый 16.09.2015, 20:00
Профессор
Отправить личное сообщение для Эдди Посмотреть профиль Найти все сообщения от Эдди
 
Регистрация: 19.06.2010
Сообщений: 279

Сообщение от laimas Посмотреть сообщение
Зачем это $('#search').click если есть это $('form:first').submit? Выбрасывайте первое и меняйте логику.
Уррррррррррррррррааааа! ВСЕМ СПАСИБО!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
jquery ответ php gadfil jQuery 5 14.05.2012 00:00
AJAX обращение к файлу php и получение значения zeraid jQuery 8 28.03.2011 14:46