2012-02-23 45 views
2

我有一個郵件列表腳本的表單,我正在嘗試使用Ajax,因此表單可以刷新而無需重新加載。通過jQuery的$ .ajax部分註釋掉,表單變量被髮送到URL字符串。通過jQuery的潛在問題傳遞的表單變量

?電子郵件=測試%40address.com &子=子&提交=提交+型

我的問題是,爲什麼是提交=提交+組成部分有因爲它不是一部分我的「數據字符串」,這將是一個問題,當涉及到處理實際的PHP腳本?

這裏是形式:

<form name="email_list" action=""> 

<p><strong>Your Email Address:</strong><br/> 
<input type="text" name="email" id="email" size="40"> 
<input type="hidden" name="sub" id="sub" value="sub"> 

<p><input type="submit" name="submit" value="Submit Form" class="email_submit"></p> 
</form> 

和JQuery的

$(function() {  
$('.email_submit').submit(function() { 

var email = $("input#email").val(); 
      if (name == "") { 
      $("input#email").focus(); 
      return false; 
     } 
var sub = $("input#sub").val(); 
      if (name == "") { 
      $("input#sub").focus(); 
      return false; 
     }  

var dataString = '&email=' + email + '&sub=' + sub; 

//alert (dataString);return false; 
/*$.ajax({ 
    type: "POST", 
    url: "mailing_list_add2.php", 
    data: dataString, 
    success: function() { 
     $('#display_block')      
     .hide() 
     .fadeIn(2500, function() { 
      $('#display_block'); 
     }); 
    } 
}); 
return false; 
});*/ 

}); 

回答

2

您應該將提交處理程序放在窗體上,而不是按鈕上,即使是提交按鈕。

<form name="email_list" action="" id="my_form"> 

更新的JavaScript

$(function() {  
    $('#my_form').submit(function() { 
    ... 
    }); 
}); 

要序列的所有投入,你可以使用$("#my_form").serialize()一個字符串,它建立了一個字符串的所有輸入和他們的數據準備好發佈:

var dataString = $("#my_form").serialize(); 

另請注意,爲提交輸入定義的name屬性意味着它的值也將以表單形式發送。如果你不需要,你可以簡單地刪除name屬性。

+0

很大的幫助,謝謝。我更新了所有這些建議。 – Andy 2012-02-23 23:14:52

1

Submit+FormSubmit Form的urlencoded的版本。因爲您指定name屬性爲<input type="submit" name="submit" ... />,所以發送字段submit。它很可能不會給你帶來任何問題(不能說沒有看你的服務器端代碼)。

此外,你真的應該指定一個method屬性到你的<form>。它似乎默認爲GET,這就是表單字段被添加到查詢字符串的原因。

+0

什麼是合適的方法屬性?表單的ajax部分看起來會起作用嗎? (如果我可以提出兩個問題;))PHP代碼本身是有效的,我還沒有嘗試過,但增加了jquery。 – Andy 2012-02-23 22:56:13

+0

@並且它看起來像你想使用'POST'。如果您在PHP中使用'$ _GET'來訪問數據,則使用'method =「GET」',並使用'$ _POST'來執行'method =「POST」'。另外你的''''''''''應該使用你選擇的方法 – Vitamin 2012-02-23 22:56:42

+0

我嘗試在POST中添加「method =」部分(因爲我的PHP使用的是$ _POST)並且未評論$ .ajax部分jquery來測試它。不知道爲什麼,但沒有奏效。無論這是我不知道的事情的PHP方面。 – Andy 2012-02-23 23:16:46

1

如果你讓你的ajax POST發生,因爲你手動創建你的dataString你不會看到Submit =,但是當你讓它正常提交時你會看到它,因爲提交按鈕是一個輸入字段具有價值。

您不會遇到任何問題。您可以訪問與其他POST值相同的提交值$_POST['submit'],儘管我不確定您想要的值。

+0

謝謝,有用的信息。 – Andy 2012-02-23 22:54:36

+0

不客氣。如果你認爲這個答案,我很感激你這樣做。 – idrumgood 2012-02-23 22:55:36