2015-02-07 115 views
0

=====更新再次====(如果有人關心!) 我之前發佈的解決方案停止工作,無論出於何種原因。我在我的ajax請求中包含了一個beforeSend,並將我的js部分驗證了我的表單。現在就像一個魅力!表單不提交與AJAX

$('#form').on('submit', function(e) { 
e.preventDefault(); //prevents page refresh 
     $.ajax({ 
     type: "post", 
     beforeSend: function(){ // check that form is complete 
         }, 
     url: "client_config_send2.php", 
     data: $(this).serialize(), 
     success: function(data){ 
      alert('Thank you'); hide_request();window.location = "#top"; 
     } 
     }); 
    }); 

編輯

見我的回答如下,使用2 .preventDefault!

我已閱讀了許多頁面/這個例子,但由於某種原因,我無法讓它在「我的」形式上工作。 我只是試圖提交我的表單而不刷新頁面或打開新的頁面/選項卡作爲確認消息。 形式:

<form id="form" name="Configurator" method="post" action=""> 
.... //Client configures his product, display an image if they choose, and request a quote. 
<button id="submit_button" type="submit" name="Submit" >Request</button> 
</form> 

的client_config_send2.php的作品,它只是拉了一堆從形式(配置,聯繫信息)的參數,並把它變成一個電子郵件。在我嘗試整合ajax之前,這部分工作正常。

的JS:

$('form').on('submit', function(e) { 
e.preventDefault();  
if(!validateForm(this)){ 
return true; 
} 

$.ajax({ 
     type: "post", 
     url: "client_config_send2.php", 
     data: $(this).serialize(), 
     done: function(data){ 
      alert("Thank you, we will get back to you shortly"); 
} 
     }); 

}) 


</script> 

的validateForm()函數也適用,它會檢查配置是否有效,如果電子郵件/聯絡信息齊全等 在這一點上,validateForm作品:如果信息丟失,彈出警報。但是,當validateForm()返回true時,表單不提交,沒有任何反應。

我試過了成功而不是做了,在JS中返回false而不是true,還有很多我在網上找到的東西,但是我迷路了。以前從未使用過AJAX,因此我對語言的微妙之處並不是100%自信!

在此先感謝!

+0

網址是否正確?試試這個,在瀏覽器中輸入url並點擊enter。這會返回什麼嗎? – Christos 2015-02-07 20:27:45

+0

打開你的控制檯,點擊網絡選項卡,然後提交表單,你會看到請求發生。響應的狀態代碼是什麼? – Charlie 2015-02-08 00:07:00

回答

0

「client_config_send2.php」是一個文件名。您提供給Ajax的URL需要是像http://example.com/client_config_send2.php這樣的URL。

+0

有兩種URL,他使用「相對」類型,但你的是「絕對」。無論如何,如果他的形式是在clien相同的文件夾.... php他的網址應該工作 – 2015-02-07 20:34:26

+0

我聽說過相對和絕對**路徑**,但沒有網址。沒有主機作爲URL的一部分,網絡如何找到主機? – bobdye 2015-02-07 20:37:54

+0

網址和路徑是相同的東西 – 2015-02-07 20:39:52

0

變化做了成功:

success: function(data){ 

成功只閃光後您的請求得到了響應,響應代碼是OK(HTTP 200)。

+0

也嘗試過。我讀過「成功」現在已經過時,但無論如何,它都不起作用。不管怎麼說,還是要謝謝你! – user2877438 2015-02-07 22:06:55

0

更新代碼如下:

$('form').on('submit', function(e) { 
e.preventDefault();  
if(!validateForm(this)){ 
return true; 
} 
var formdata = $(this).serialize(); 

$.ajax({ 
     type: "post", 
     url: "http://www.example.com/client_config_send2.php", 
     data: formdata, 
     success: function(data){ 
      alert("Thank you, we will get back to you shortly"); 
} 
     }); 

}) 


</script> 
+0

不幸的是:(更新了「example.com」顯然,但沒有任何。validateForm()仍然有效,但沒有任何反應,當我點擊提交按鈕 – user2877438 2015-02-07 22:06:04

0

你能嘗試刪除/評論event.preventDefault();

如果調用此方法,則不會觸發該事件的默認操作。 (http://api.jquery.com/event.preventdefault/

+0

如果我刪除preventDefault表單獲取提交無論validateForm()函數返回true或假。簡單地說,我收到一封電子郵件,其中有一半的信息丟失了! – user2877438 2015-02-09 18:14:42

0

嘗試使用以下格式進行編碼。該邏輯使用if/else語句來進行ajax調用。

$('form').on('submit', function(e) { 
    //If form could not be validated 
    if(!validateForm(this)){ 
     //prevent the form form submitting 
     alert("Your form is not valid for submission!"); 
     e.preventDefault(); 
    } 
    //else 
    else{ 
     //form input is valid 
     //make the ajax call 
     $.ajax({ 
      type: "post", 
      url: "client_config_send2.php", 
      data: $(this).serialize(), 
      done: function(data){ 
       alert("Thank you, we will get back to you shortly"); 
      } 
      }); 
     } 
    }); 
}); 
+0

感謝您的幫助,儘管還不完美,但如果validateFrom返回false,它會返回警告(好)。它仍然返回錯誤,並不提交。我會做一些調整,我知道我非常接近解決方案:) – user2877438 2015-02-11 17:58:02

+0

我調整了一下你的代碼,並得到它的工作: $('form') .on('submit',function(e){ \t var x = validateForm(); if(x == false){ ... }); 當validateForm爲true時,提交工作,它不會打開一個新標籤(好!),但會刷新頁面並丟失客戶輸入的所有信息(錯誤)。 感謝您的幫助,關於更多使用Google搜索以瞭解如何在ajax之後「保存」信息! 編輯:但確認警報不顯示。 – user2877438 2015-02-11 19:25:07

0

這裏是最後的代碼,不會正是我想要的: - 在validateForm()函數的工作,因爲它應該。如果表單不完整,則返回false,彈出警告並且表單不提交 - 如果validateForm()返回true,表單將被提交,彈出確認警報並且頁面不刷新。然後,用戶可以構建新的配置並提交新的請求,而無需重新輸入所有聯繫信息。

2.preventDefault有竅門!

$('form').on('submit', function(e) { 
e.preventDefault(); //prevents page refresh when form is submitted 
//If form could not be validated 
var x = validateForm(); 
if(x == false){ 
    //prevent the form form submitting 
    e.preventDefault(); 
} 
//else 
else { 
    //form input is valid 
    //make the ajax call 
    $.ajax({ 
     type: "post", 
     url: "client_config_send2.php", 
     data: $(this).serialize(), 
     success: function(data){ 
      alert('Thank you! we will get back to you within 24 hours. Please check your junk/spam folder if you do not receive a response within that time.'); 
     } 
     }); 
    } 
}); 

謝謝大家的幫助!