混合输入类型值序列化并通过jQuery AJAX发送到PHP文件
我有一个带有文本文件和复选框的表单,我想将其值混合输入类型值序列化并通过jQuery AJAX发送到PHP文件,php,jquery,ajax,serialization,Php,Jquery,Ajax,Serialization,我有一个带有文本文件和复选框的表单,我想将其值发布到PHP文件中。我已经了解到,为了通过$.ajax()方法来实现这一点,我需要对输入中的数据进行序列化,并将整个字符串发送到服务器,然后服务器检索字符串并对其进行反序列化,并将其转换为数组,这样我就可以处理每个值。这是正确的吗 问题是,我的PHP文件显然没有正确获取字符串,因为它的组成不正确或发送不正确。我将处理一些突出这个问题的代码片段 HTML <form id="form1"> <fieldset> <lege
发布到PHP文件中。我已经了解到,为了通过$.ajax()
方法来实现这一点,我需要对输入中的数据进行序列化,并将整个字符串发送到服务器,然后服务器检索字符串并对其进行反序列化,并将其转换为数组,这样我就可以处理每个值。这是正确的吗
问题是,我的PHP文件显然没有正确获取字符串,因为它的组成不正确或发送不正确。我将处理一些突出这个问题的代码片段
HTML
<form id="form1">
<fieldset>
<legend>Data for text</legend>
<label>TF1</label>
<input type="text" name="tf1" id="tf1" />
<label>TF2</label>
<input type="text" name="tf2" id="tf2" />
<legend>Data for checkboxes</legend>
<label>Check1</label>
<input type="checkbox" name="check" value="value1" />
<label>Check2</label>
<input type="checkbox" name="check" value="value2" />
<label>Check3</label>
<input type="checkbox" name="check" value="value3" />
<input type="button" onclick="ajaxjquery()" value="OK">
</fieldset>
</form>
出现的问题:
- 将输入数据序列化后,
.done(警报(str))
指示已发送且格式正确的字符串:tf1=x&tf2=y&check=value1&check=value2
- 但是,当
$.get
尝试检索响应时,响应仅是刚刚形成的数组或其元素之一,它是空白的(null?)。不管php脚本做什么:我已经尝试了echo
ing唯一变量、var\u dump
、print\u r
和parse\u str
,但它总是发送一个空白响应,所以我不确定是否发送了正确的字符串,或者服务器的响应是否没有正确发送,或者是什么
如果您想知道,我正在反序列化字符串,如下所示:
PHP
parse_str($_POST['str'], $data);
echo $data['tf1'];
请注意,如果我回显php文件中的任何其他内容,$.get方法的响应正常,除了假定接收到的字符串以外的所有内容。您的复选框名称应该有[]
出现,即
<input type="checkbox" name="check[]" value="value1" />
谢谢你的回复。它提醒Response:array(0){}
Perfect,just Perfect!所以我去掉了$.get胡说八道,按照您的建议重新生成了.done函数,现在它可以正常工作了!警报显示了整个数组和子数组,在php端,我最终可以访问其元素。我从昨天开始就在做这件事,你救了我的命。非常感谢你,马克!:D
<input type="checkbox" name="check[]" value="value1" />
function ajaxjquery(){
var str = $("#form1").serialize();
$.ajax({
type: "POST",
url: "test.php",
data: str
})
.done(alert(str)); // alert() will be called immediately, you need to put this in a closure like so:
.done(function(response) { alert(response); });
$.get("test.php", function(data) {
alert("Response: " + data);
}); // this is sending a separate GET request to test.php passing no data to it -- PHP will never receive any POST nor GET variables
}