2011-10-13 157 views
0

我通過操作方法發佈表單到遠程服務器,但調用jquery函數更新數據庫之前發佈 - 所有工作正常在IE ,FF等......但是,當返回值爲true時,Safari總是無法執行jquery數據庫插入操作,或者async:true,...如果兩者都是false,(因此html表單由於錯誤聲明而無法發佈)它完美的作品?但是,如果爲true,表單將只是POST,但jquery ajax文章不會運行?jquery ajax post在IE,FF,Chrome,但不是Safari瀏覽器中工作正常

表單...

<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瀏覽器(所有版本測試)都失敗時,ayone可以提供任何建議嗎?或者提供更好的解決方案來做我所需要的? - 與異步/發佈有關?正如我所說,設置爲false並且工作正常......但是,我需要HTML表單仍然發佈!

非常感謝!

+0

注意:是HTML 5嗎? ID不能以HTML 4中的數字開頭。 –

+0

問題已解決......似乎在成功函數中只有$(「#myform-post」)。trigger(「submit」)可用於Safari – Marc

回答

0

你應該使用

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; 
+0

嗨,我試過了(從html表單中刪除action =「」帖子,所以action爲空)... ajax post可以工作,但表單不會將HTML發佈到window.location(遠程服務器) - 它仍然在表單上循環中的頁面? – Marc

+0

@Marc不會改變你的表單動作。只需用您的代碼替換防雷碼。並在window.location.url –

1

如果我理解正確的話,你要卸載的頁面,同時有一個懸而未決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 
    } 
}); 
+0

給你的表單動作網址嗨,謝謝 - 我仍然有點困惑如何實現呢?你能否提供一個例子?我真的很苦惱這個!謝謝 – Marc

+0

@Marc - 查看我的更新 –

+0

嗨,謝謝 - 我已經更新了我的腳本的縮小版本的初始文章 - 我已經添加了您的代碼,但它仍然在Safari中失敗?它可以只發布ajax POST或張貼HTML表單,而不是像FF,IE一樣。 希望我上面的代碼更新可以幫助解決? 謝謝 – Marc

相關問題