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

我有一个邮件列表脚本的表单,我试图使用ajax,因此表单可以刷新 重装。 随着jquery的$ .ajax部分被注释掉,表单变量被发送到URL字符串。 </ p>


?email = test%40address.com&amp; sub = sub&amp; submit = Submit + Form </ p>
</ blockquote>

我的问题是为什么提交=提交+表单部分,因为它不是我的“数据字符串”的一部分,并且在处理实际的PHP脚本时会出现问题吗?</ p>

以下是表单:</ p>

 &lt; form name =“email_list”action =“”&gt; 

&lt; p&gt;&lt; strong&gt;您的电子邮件地址 :&lt; / strong&gt;&lt; br /&gt;
&lt; input type =“text”name =“email”id =“email”size =“40”&gt;
&lt; input type =“hidden”name =“ sub“id =”sub“value =”sub“&gt;

&lt; p&gt;&lt; input type =”submit“name =”submit“value =”Submit Form“class =”email_submit“&gt;&lt; / p&gt;
&lt; / form&gt;
</ code> </ pre>

和JQuery </ p>

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

var email = $(“input#email”)。val();
if(name ==“”){
$(“输入 #email“)。focus();
返回false;
}
var sub = $(”input#sub“)。val();
if(name ==“”){
$(“input#sub”)。focus();

返回false;
}

var dataString ='&amp; email ='+ email +'&amp; 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;

}); * /

});

</ code> </ pre>
</ div>

展开原文

原文

I have a form for a mailing list script which I am trying to get working with ajax so the form can refresh without reloading. With the $.ajax part of the jquery commented out, the form variables are sent to the URL string.

?email=test%40address.com&sub=sub&submit=Submit+Form

My question is why is the submit=Submit+Form part there given that it isn't part of my "datastring" and will that be a problem when it comes to processing the actual PHP script?

Here is the form :

<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>

and the 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个回答



您应该将提交处理程序放在表单上,​​而不是按钮上,即使是提交按钮。</ p>

&lt; form name =“email_list”action =“”id =“my_form”&gt;
</ code> </ pre>

更新javascript </ p >

  $(function(){
$('#my_form')。submit(function(){
...
});
});
</ code> </ pre>

要将所有输入序列化为字符串,您可以使用 $(“#my_form”)。serialize()</ code>构建一个包含所有字符串的字符串 输入及其数据准备发布:</ p>

  var dataString = $(“#my_form”)。serialize(); 
</ code> </ pre>

另请注意,为提交输入定义 name </ code>属性意味着其值也将在表单中发送。 如果您不需要,只需删除 name </ code>属性。</ p>
</ div>

展开原文

原文

You should put the submit handler on the form, not on the button, even if is a submit button.

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

Update the javascript

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

To serialize all the inputs into a string you could use $("#my_form").serialize() which builds a string with all the inputs and their data ready for posting:

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

Also note that having a name attribute defined for the submit input means that its value will be sent also in the form. If you don't need that, you can simply remove the name attribute.

dongzhun1857
dongzhun1857 很好的帮助,谢谢。 我更新了所有这些建议。
8 年多之前 回复



提交+表单</ code>是提交表单</ code>的urlencoded版本。 发送 submit </ code>字段是因为您为指定了 name </ code>属性&lt; input type =“submit”name =“submit”... /&gt; </ 代码>。 它很可能不会给你带来任何问题(不过不看你的服务器端代码)。</ p>

另外,你真的应该指定一个方法</ 代码>属性到您的&lt; form&gt; </ code>。 它似乎默认为 GET </ code>,这就是表单字段被添加到查询字符串的原因。</ p>
</ div>

展开原文

原文

Submit+Form is the urlencoded version of Submit Form. The field submit is sent because you specify a name attribute to <input type="submit" name="submit" ... />. It will most likely not cause any problems for you (can't say without looking at your server-side code though).

Also, you really should specify a method attribute to your <form>. It seems to default to GET, which is why the form fields are added to the query string.

douyinmian8151
douyinmian8151 我尝试用POST添加“method =”部分(因为我的PHP使用$ _POST)并且在jquery中取消注释$ .ajax部分来测试它。 不知道为什么,但它不起作用。 这是否是PHP方面我不知道的事情。
8 年多之前 回复
duanqiang7631
duanqiang7631 看起来你想要使用POST。 如果你在PHP中使用$ _GET来访问数据,那么method =“GET”,而使用$ _POST你会做method =“POST”。 您的JavaScript周围类型:“POST”应该使用您选择的任何方法
8 年多之前 回复
duancong7573
duancong7573 什么是合适的方法属性? 表单的ajax部分看起来是否有效? (如果我可以问两个问题;))PHP代码自己工作,我还没有尝试添加jquery。
8 年多之前 回复



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

你不会遇到任何问题。 您可以访问提交值与任何其他POST值 $ _ POST ['submit'] </ code>相同,但我不确定您为什么要这样做。</ p>
</ div >

展开原文

原文

If you let your ajax POST happen, since you'r manually creating your dataString you won't see the Submit=, however when you let it submit 'normally' you see it, since the submit button is an input field with a value.

You won't encounter any issues with this. You can access the submit value just the same as any other POST value $_POST['submit'] though I'm not sure why you'd want to.

doujiang1001
doujiang1001 别客气。 如果你认为这个问题得到了解答,我将非常感谢你这样做。
8 年多之前 回复
dongtou8736
dongtou8736 谢谢,有用的信息。
8 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐