表单变量通过jquery潜在问题传递

时间:2012-02-23 22:45:59

标签: php jquery forms

我有一个邮件列表脚本的表单,我正在尝试使用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; 
});*/

}); 

3 个答案:

答案 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+FormSubmit Form的urlencoded版本。发送字段submit是因为您为name指定了<input type="submit" name="submit" ... />属性。它很可能不会给你带来任何问题(不过不看你的服务器端代码)。

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

答案 2 :(得分:1)

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

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