Я заметил странное явление в моей среде 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. Таким образом, я могу быть уверен, что весь запрос был передан.
Тем не менее это не фиксирует источник проблемы, который я до сих пор не понимаю.
Любая помощь кому-нибудь?