簡體   English   中英

jQuery ajax發布在IE,FF,Chrome中正常運行,但在Safari中無法正常運行

[英]jquery ajax post works fine in IE, FF, Chrome but not Safari

我正在通過action方法將表單發布到遠程服務器,但是在發布之前調用jquery函數來更新數據庫-在IE,FF等中一切正常,但是,Safari始終無法執行jquery數據庫當return為true或async:true,...時插入,如果兩者均為false,(那么由於錯誤的聲明,html表單將無法發布),是否可以正常工作? 但是當為true時,表單將僅POST,但是jquery ajax帖子將不會運行?

表格 ...

 <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

該腳本基於提交ID在“點擊”方法上運行(先進行驗證,然后進行AJAX發布)。

如果在Safari(測試所有版本)中均失敗,yone可以提供任何建議還是提供更好的解決方案來滿足我的需要? -與異步/發布有關? 就像我說的那樣,將其設置為false可以正常工作...但是,我仍然需要HTML表單才能發布!

非常感謝!

如果我理解正確,那么您想在有待處理的AJAX請求時卸載該頁面。 即使在看起來可以正常工作的瀏覽器中,也幾乎沒有機會正常工作。

我的建議是首先中止表單的POST請求( return false; ),並將代碼添加到success處理程序中,以在AJAX請求完成時觸發表單提交。 您可以使用標志變量,以便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
    }
});

你應該使用

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM