通过jquery传递的表单变量可能存在问题


Form variables passed via jquery potential issue

我有一个邮件列表脚本的表单,我正在尝试使用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+FormSubmit Form的url编码版本。之所以发送字段submit,是因为您为<input type="submit" name="submit" ... />指定了name属性。它很可能不会给您带来任何问题(不过,如果不查看服务器端代码,就不能说)。

此外,您确实应该为<form>指定一个method属性。它似乎默认为GET,这就是为什么将表单字段添加到查询字符串中的原因。

如果您让ajax POST发生,因为您手动创建dataString,所以您不会看到Submit=,但当您让它"正常"提交时,您会看到它,因为提交按钮是一个有值的输入字段。

你不会遇到任何问题。您可以像访问任何其他POST值$_POST['submit']一样访问提交值,但我不确定您为什么要这样做。