jquery ajax post在IE, FF, Chrome中工作很好,但不是Safari



我通过动作方法发布一个表单到远程服务器,但调用jquery函数在发布之前更新数据库-所有工作在IE, FF等. ...中都很好但是,Safari总是无法做jquery数据库插入时返回为true或async: true,…如果两者都是假的,(所以HTML表单不设法张贴由于错误的声明)它工作完美吗?但当为true时,表单只会POST,但jquery ajax POST不会运行?

The Form…

 <form action="http://anotherplace" method="post" id="myform" >
<button class="button-big" type="submit" id="myform-post" ><span>Continue</span></button>

function…

   $(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

脚本运行在一个'click'方法基于提交ID(做验证然后AJAX post)。

谁能提供任何建议,当这失败在Safari(所有版本测试)或提供一个更好的解决方案来做我需要什么?-与异步/张贴有关?正如我所说,设置为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;

然后输入form action

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;

相关内容

最新更新