JQuery AJAX пост прекрасно работает в IE, FF, Chrome, но не Safari - PullRequest
0 голосов
/ 13 октября 2011

Я отправляю форму на удаленный сервер с помощью метода действия, но вызываю функцию jquery для обновления базы данных до публикации - все прекрасно работает в IE, FF и т. Д., Но Safari всегда не удается выполнитьвставка базы данных jquery, когда return - true ИЛИ async: true, ... если оба имеют значение false, (поэтому html-форма не удается опубликовать из-за ложного объявления), это работает отлично?Но когда true, форма будет просто POST, но пост jquery ajax не запустится?

The Form ...

 <form action="http://anotherplace" method="post" id="myform" >

<button class="button-big" type="submit" id="myform-post" ><span>Continue</span></button>

Функция ...

   $(document).ready(function() { //available when doc renders


   $("form#myform").submit(function(){

    var title = $("select#title").val();
    if (title == "") {
    $("select#title").css({backgroundColor:"#ccc"});        
    $("select#title").focus();
     return false;
   }

     var firstname = $("input#fname").val();
    if (firstname == "") {
     $("input#fname").css({backgroundColor:"#ccc"});
     $("input#fname").focus();
     return false;    }

      var surname = $("input#sname").val();
    if (surname == "") {
     $("input#sname").css({backgroundColor:"#ccc"});
     $("input#sname").focus();
     return false;    }



//Grab the form values to pass via AJAX for DB insert

var cameraMake = $("input#cameraMake").val();
var cameraModel = $("input#cameraModel").val();
var cameraValue = $("input#cameraValue").val();
var mp3Make = $("input#mp3Make").val();
var mp3Model = $("input#mp3Model").val();
var mp3Value = $("input#mp3Value").val();


        var dataString='&title='+ title  + '&firstname=' + firstname + '&surname=' + surname + '&add1=' + add1 + '&add2=' + add2 + '&add3=' + add3 + '&pcode=' + pcode + '&email=' + email + '&phone=' + phone +'&username=' + username + '&pword=' + pword; 

var ajaxComplete = false;
if( !ajaxComplete ){
        $.ajax({
            async: true,              
            type: "POST",
            url: "process-.php",
            data: dataString,
            success: function() {
               // $('#details').html("<div id='post-message'></div>");
               // $('#post-message').html("<h2 style='color:#fff'>Thanks for getting in touch.</h2>")

                ajaxComplete = true;
                this.submit();

            }
        });
        return false; // Abort form submission by now
    }else{
        return true; // Submit normally
    }
});


}); //End of document.ready

Сценарий выполняется по методу «щелчка» на основе идентификатора отправки (после проверки выполняется публикация AJAX).

Может ли кто-нибудь дать какой-либо совет, если это не удастся в Safari (все протестированные версии), или предложитьлучшее решение сделать то, что мне нужно?что-то делать с асинхронным / публикации?Как я уже сказал, установите значение false, и оно будет работать нормально ... НО, мне нужна HTML-форма для публикации!

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 13 октября 2011

Если я правильно понимаю, вы хотите выгрузить страницу, пока есть ожидающий AJAX-запрос. У этого мало шансов работать правильно, даже в браузерах, где это работает.

Мой совет - сначала прервать запрос формы POST (return false;) и добавить код в обработчик success, чтобы инициировать отправку формы после завершения запроса AJAX. Вы можете использовать переменную flag, чтобы запрос AJAX срабатывал только в первый раз.

Обновление:

Какой-то быстрый, грязный и непроверенный код. Я также понял, что вы пропустили начало блока кода, поэтому я просто изобрел его:

var ajaxComplete = false;
$("form#3-form").submit(function(){
    if( !ajaxComplete ){
        $.ajax({
            async: true,              
            type: "POST",
            url: "process-.php",
            data: dataString,
            success: function() {
                $('#details').html("<div id='post-message'></div>");
                $('#post-message').html("<h2 style='color:#fff'>Thanks for getting in touch.</h2>")

                ajaxComplete = true;
                this.submit();

            }
        });
        return false; // Abort form submission by now
    }else{
        return true; // Submit normally
    }
});
0 голосов
/ 13 октября 2011

Вы должны использовать

return false;

, а затем перейти к действию формы

window.location.url = "YOUR URL";

Итак

$.ajax({
    async: true,              
    type: "POST",
    url: "process-.php",
    data: dataString,
    success: function() {
        $('#details').html("<div id='post-message'></div>");
        $('#post-message').html("<h2 style='color:#fff'>Thanks for getting in touch.</h2>");
        window.location.url = "YOUR URL";
    }
});
return false;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...