#javascript #jquery #google-chrome #post
#javascript #jquery #google-chrome #Публикация
Вопрос:
После выполнения теста за тестом и создания новых скриптов я обнаружил, что у Chrome возникли проблемы с этой частью моего скрипта jquery:
$(document).ready(function(){
$(".subto").click(function() {
var data = {ramp: ramp, toilet:toilet, door:door, blind:blind,
dog:dog, assist:assist, ear:ear, lift:lift, park:park, ramped:ramped, star:star
};
levelramp(data);
});
function levelramp(ramp,toilet) {
var url = "http://youraccessguru.com/sesstest1.php";
$.post(url, {ramp: ramp},function(data) {
$("#text").val(data).show();
});
}
http://youraccessguru.com/sesstest.php
Получение ошибки по-прежнему зависит от того, как долго вы нажимаете кнопки, попробуйте это увидеть. Если вы как можно скорее нажмете на картинку и отправите скрипт, он будет работать
, но если вы нажмете «Назад» и подождете 30 секунд на странице, затем выберите и нажмите «Отправить», индикатор не изменится и не сработает.
Первая кнопка все равно не работает, отдельная проблема просто не установлена.
Сайт отлично работает в любом другом браузере, кроме Google Chrome
Ответ №1:
Первая проблема, которую я вижу, заключается в том, что вы привязываете запрос POST к кнопке отправки, которая отправляет свою собственную форму, и вы не препятствуете отправке этой формы. Итак, ваш скрипт делает это, когда вы нажимаете subto:
- Запустите ajax post, чтобы http://youraccessguru.com/sesstest1.php
- Сразу после этого запускайте регулярный запрос POST на http://youraccessguru.com/sesstest.php без каких-либо данных
Обратите внимание, что это может происходить даже не по порядку. Я понятия не имею, что на самом деле делает номер 2, но я предполагаю, что он перенаправляет вас на sesspreview.php если он получает данные POST.
Итак, у вас есть 2 варианта. Если вы хотите выполнить обновление страницы, вам абсолютно не нужно использовать ajax-запрос. Если вы все еще хотите использовать ajax, остановите отправку обычной формы и перенаправьте на sesspreview.php о функции завершения ajax.
НАПРИМЕР:
$(function(){
$(".subto").click(function(e) {
e.preventDefault();
var data = {ramp: ramp, toilet:toilet, door:door, blind:blind, dog:dog, assist:assist, ear:ear, lift:lift, park:park, ramped:ramped, star:star};
levelramp(data);
});
function levelramp(ramp,toilet) {
var url = "http://youraccessguru.com/sesstest1.php";
$.post(url, {ramp: ramp}, function(data) {
window.location.href = "sesspreview.php";
});
}
});
Конечно, это зависит от того, как настроены ваши PHP-файлы и что они на самом деле делают. Я понятия не имею, поэтому, если вы отправляете данные в sesspreview.php , это не сработает.
РЕДАКТИРОВАТЬ: Хорошо, итак, вы продолжаете использовать AJAX, затем обычный POST для отправки остальных данных. В этом случае сначала отправьте AJAX, затем дождитесь ответа ajax перед отправкой остальной части формы. Дайте вашей форме идентификатор, затем используйте такой код:
$(function(){
$(".subto").click(function(e) {
e.preventDefault();
var data = {ramp: ramp, toilet:toilet, door:door, blind:blind, dog:dog, assist:assist, ear:ear, lift:lift, park:park, ramped:ramped, star:star};
levelramp(data);
});
function levelramp(ramp,toilet) {
var url = "http://youraccessguru.com/sesstest1.php";
$.post(url, {ramp: ramp}, function(data) {
$('#formID').submit();
});
}
});
Комментарии:
1. Кнопка отправки предназначена для сохранения других полей, таких как текстовые поля, и проверки любого ввода от пользователя. Поэтому отключение этого усложняет задачу.
2. Тогда почему бы просто не отправить данные ‘ramp’ вместе с остальной частью формы? Зачем отправлять ‘ramp’ в запросе ajax post, а затем немедленно отправлять остальные данные в обычном запросе post?
3. Кнопка отправки предназначена для сохранения других полей, таких как текстовые поля, и проверки любого ввода от пользователя с помощью php. Поэтому отключение этого усложняет задачу. Я посмотрю, поможет ли ваше предложение. sesstest1 сохраняет .post в сеансах php, чтобы затем их можно было сохранить в базе данных mysql. Пользователи не отправляются в sesspreview, пока все поля не будут проверены с указанием . Время публикации для сохранения сеансов. Извините, я не эксперт-разработчик. youraccessguru.com/createnew.php Это полная страница. Sesspreview просто отображает выделенные изображения перед сохранением в mysql.
4. Jquery изменяет изображения при необходимости обновления браузера
5. Проблема, о которой я, возможно, не совсем понял, заключается в том, что вы отправляете 2 запроса POST один за другим. Один через AJAX для этих кнопок, затем один через обычный POST для остальной части формы. Это плохая практика и вполне может вызывать проблемы, поскольку страница может перенаправляться до того, как у сообщения AJAX будет достаточно времени для фактической отправки. Если вам абсолютно НЕОБХОДИМО сделать это таким образом (вы этого не делаете), прочитайте обновление к моему ответу, которое я опубликую примерно через 1 минуту.