使用serializeArray()转换表单数据并通过.Ajax发送php

时间:2017-05-22 13:47:24

标签: javascript php ajax forms

这是我的第一篇文章。我已经搜索了其他解决方案,我发现只解决了这个问题的组成部分。基本上这就是我想做的事情:

  • 捕获表单数据(已测试,正常工作);
  • 使用serializeArray()或serialize()转换表单数据(测试两个选项,正常工作和输出到控制台);
  • 通过Ajax将此信息发送到服务器(不工作);和
  • PHP将数组保存为CSV(尚未启动)。

Bellow是我正在使用的代码。但首先,我尝试了一些替代方案。通常我会得到这个: array(0){}

  • 'dataType'作为Json - 返回错误;
  • 'GET','POST'和'REQUEST' - PHP显示空数组;
  • 使用form.serialize() - PHP显示空数组;
  • 使用form.serializeArray() - PHP显示空数组;和
  • var_dump($ _ POST),var_dump($ _ GET),var_dump($ _ REQUEST)。

    var serialisedForm = $(form).serializeArray();
    
    var serialisedData = JSON.stringify(serialisedForm);
    console.log(serialisedData); //working
    console.log(serialisedForm); //working
    
    $.ajax({
        type: "POST",
        url: "datacapture.php",
        data: {
            serialisedForm, //tested using serialisedData as well
        },
        success: function() {
            window.open('datacapture.php');
        },
        error: function() {
            alert("the form data has not been sent to the server");
        }
    })  
    

这是我用来测试信息流的datacapture.php脚本。

<?php 

var_dump($_POST);

?>

编辑 - 这是一个示例表单项,从我的settings.json文件中读取.text和.name:

<tbody>
                {
                this.props.settings.schemes[0].questions.map((q, i)=> {
                    return <tr><td>{q.text}</td><td><div class="YesNo"><input type="radio" required name={q.name} value="yes">Yes</input><input type="radio" required name={q.name} value="no">No</input></div></td></tr>
                })
                }
            </tbody>

1 个答案:

答案 0 :(得分:0)

只需将1seralisedForm1更改为1seralisedData1,它将向php返回一个json对象,可以通过执行以下操作来查看:

echo json_decode($_POST);