Я заметил странное явление в моей среде LAMP.
По интерфейсу я выполняю запрос AJAX post с jQuery следующим образом:
$.post('save.php', {data1: d1, data2: d2, [...], dataN: dN})
Переменные d1
to dN
собираются с веб-сайта (например, из текстовых входов, текстовых полей, флажков и т.д.) с помощью jQuery заранее.
Файл save.php
принимает параметры сообщения data1
до dataN
и сохраняет их в базе данных в одном запросе.
Запрос занимает около 500 мс и работает без проблем, если я не изменю страницы (например, щелкнув ссылку) во время запроса.
Обычно я ожидаю, что запрос будет прерван и проигнорирован (что будет хорошо), но (и это странное поведение), запрос, кажется, завершен, но только с частью переданных и, таким образом, сохраненных данных.
Это означает, например, что PHP скрипт сохраняет только data1
до data5
и устанавливает data6
в dataN
на пустую.
Проблема, похоже, вызвана запросом AJAX уже (а не php script), так как поля $_POST['data6']
до $_POST['dataN']
не установлены в php в этом сценарии.
Итак, мои вопросы:
Почему это происходит (это ожидаемое поведение)?
Как я могу избежать этого?
Обновление
Проблема заключается не только в jQuery и php. jQuery правильно собирает значения и пытается отправить их в php. Я просто подтвердил это - он работает.
С другой стороны, PHP скрипт обрабатывает все, что он получает, как ожидалось, - он просто не получает весь запрос.
Таким образом, проблема должна заключаться в прерванном запросе. В отличие от того, что я ожидал, что он не прервется или не сработает, он все равно передает все данные до отключения.
Затем php получает эти данные и начинает обрабатывать их - очевидно, отсутствует какая-либо информация.
Обновление 2
Я исправил проблему, добавив параметр eof
после dataN
и проверив, был ли он установлен в php. Таким образом, я могу быть уверен, что весь запрос был передан.
Тем не менее это не фиксирует источник проблемы, который я до сих пор не понимаю.
Любая помощь кому-нибудь?