混合输入类型值序列化并通过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
}