我有一个邮件列表脚本的表单,我正在尝试使用ajax,因此表单可以刷新而无需重新加载。随着jquery的$ .ajax部分被注释掉,表单变量被发送到URL字符串。
?电子邮件=测试%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;
});*/
});
答案 0 :(得分: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
属性。
答案 1 :(得分:1)
Submit+Form
是Submit Form
的urlencoded版本。发送字段submit
是因为您为name
指定了<input type="submit" name="submit" ... />
属性。它很可能不会给你带来任何问题(不过不看你的服务器端代码)。
另外,您确实应该为method
指定<form>
属性。它似乎默认为GET
,这就是表单字段添加到查询字符串的原因。
答案 2 :(得分:1)
如果你让你的ajax POST发生,因为你手动创建你的dataString
你将看不到Submit =,但是当你让它'正常'时你会看到它,因为提交按钮是带有值的输入字段。
你不会遇到任何问题。您可以访问提交值与任何其他POST值$_POST['submit']
一样,但我不确定您为什么要这样做。