我有一个邮件列表脚本的表单,我正在尝试使用ajax,这样表单就可以在不重新加载的情况下刷新。jquery的$.ajax部分被注释掉后,表单变量被发送到URL字符串。
电子邮件=测试%40address.com&sub=sub&submit=提交+表单
我的问题是,既然submit=submit+Form部分不是我的"数据字符串"的一部分,为什么会出现它?在处理实际的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;
});*/
});
您应该将提交处理程序放在表单上,而不是按钮上,即使是提交按钮。
<form name="email_list" action="" id="my_form">
更新javascript
$(function() {
$('#my_form').submit(function() {
...
});
});
要将所有输入序列化为一个字符串,可以使用$("#my_form").serialize()
构建一个包含所有输入及其数据的字符串:
var dataString = $("#my_form").serialize();
还要注意,为提交输入定义了name
属性意味着它的值也将在表单中发送。如果不需要,可以简单地删除name
属性。
Submit+Form
是Submit Form
的url编码版本。之所以发送字段submit
,是因为您为<input type="submit" name="submit" ... />
指定了name
属性。它很可能不会给您带来任何问题(不过,如果不查看服务器端代码,就不能说)。
此外,您确实应该为<form>
指定一个method
属性。它似乎默认为GET
,这就是为什么将表单字段添加到查询字符串中的原因。
如果您让ajax POST发生,因为您手动创建dataString
,所以您不会看到Submit=,但当您让它"正常"提交时,您会看到它,因为提交按钮是一个有值的输入字段。
你不会遇到任何问题。您可以像访问任何其他POST值$_POST['submit']
一样访问提交值,但我不确定您为什么要这样做。