Javascript 使用JQuery Mobile使用PHP、POST和JSON向服务器发送数据时出现问题

Javascript 使用JQuery Mobile使用PHP、POST和JSON向服务器发送数据时出现问题,javascript,php,ajax,json,jquery-mobile,Javascript,Php,Ajax,Json,Jquery Mobile,我已经彻底研究了这个主题,但由于讨论的分散性和每个人似乎都有非常不同的用例,似乎找不到答案 我使用JQuery mobile通过$.ajax()调用将数据发送到PHP登录/注册脚本。我试图发送的数据似乎从未发送到服务器进行评估,我不知道为什么 我正在尝试从以下表单发送数据: <div data-role="content"> <form id="reg_form" data-ajax="false"> <div data-role="fieldc

我已经彻底研究了这个主题,但由于讨论的分散性和每个人似乎都有非常不同的用例,似乎找不到答案

我使用JQuery mobile通过$.ajax()调用将数据发送到PHP登录/注册脚本。我试图发送的数据似乎从未发送到服务器进行评估,我不知道为什么

我正在尝试从以下表单发送数据:

<div data-role="content">
    <form id="reg_form" data-ajax="false">
      <div data-role="fieldcontain">
        <label for="reg_email">Email:</label>
        <input type="email" name="reg_email" id="reg_email" value=""  />

        <label for="reg_pass">Password:</label>
        <input type="password" name="reg_pass" id="reg_pass" value=""  />

        <label for="reg_pass_conf">Password:</label>
        <input type="password" name="reg_pass_conf" id="reg_pass_conf" value=""  />

      <h4 id="reg_notification"><?php echo 'Notifications will appear here...';  ?></h4>
      <button data-theme="b" id="reg_submit" type="button">Register!</button>
      </div>
  </form>
</div>
将其发送到此php脚本:

<?php

if (isset($_POST['formDataReg'])) {
    $reg_email = 'formData is set';
}else{
    $reg_email = 'formData is not set';
}

$formData = json_decode($_POST['formDataReg']); 

$reg_pass = $formData->{'reg_pass'};
$reg_pass_conf = $formData->{'reg_pass_conf'};

$output = array('email' => $reg_email, 'pass' => $reg_pass, 'pass_conf' =>     $reg_pass_conf);
echo json_encode($output);
?>

但是,如前所述,if/else块检测到$u POST['formDataReg']甚至没有设置。当我试图用它来给变量赋值时,它显然没有数据可供赋值,我得到的是空值

在ajax调用中传递给服务器之前,我使用alert验证formDataReg是否确实保存了正确的表单值。它不知怎的在ajax调用中丢失了,或者我没有正确地访问它

如果有人能给我指出正确的方向,我将非常感激。

通过以下方式:

var formDataReg = $("#reg_form").serialize();
您已将表单序列化到表单中。现在在
formDataReg
中有这样的内容:

reg_email=xxx@gmail.com&reg_pass=yyy&reg_pass_conf=yyy
您必须在php文件中解析此查询:

$email = $_POST['reg_email'];
$pass = $_POST['reg_pass'];
$pass_conf = $_POST['reg_pass_conf'];
但是您尝试使用未发送的
$\u POST['formDataReg']
。所以这是错误的。是的,在JS中有变量
formDataReg
,但它没有任何意义。您已将序列化字符串(查询)与ajax请求一起发送,并且必须对其进行处理

所以这个代码:

if (isset($_POST['formDataReg'])) {
    $reg_email = 'formData is set';
}else{
    $reg_email = 'formData is not set';
}

$formData = json_decode($_POST['formDataReg']); 
无法工作,因为您没有发送
formDataReg
,并且
$\u POST
数组中没有此键的值

这:

$reg_pass = $formData->{'reg_pass'};
$reg_pass_conf = $formData->{'reg_pass_conf'};

$output = array('email' => $reg_email, 'pass' => $reg_pass, 'pass_conf' =>     $reg_pass_conf);
echo json_encode($output);
应该能正常工作


让我知道有些地方不清楚。

调试的一个好方法是将print\r($\u POST)添加到php脚本中,以查看完整的POST数组并查看数据是否存在。嗯,我已经尝试过使用php的更好的错误报告方法。在这样的脚本编写情况下,这似乎很困难,因为它会将任何回显或打印的信息返回给javascript处理函数。那么我如何看待输出呢?这是完全正确的;我刚测试过。显然,我对这些东西还不熟悉,所以我知道这将是一件相对琐碎的事情。你的回答为我节省了很多时间和压力。谢谢附加问题:如果我在data:字段中发送了一个JSON对象,而不是.serialize(),它生成了一个字符串,那么我的PHP解码语法就可以工作了,对吗?如果答案对你有帮助,你可以接受答案并给出+1:)会更好:)我很高兴听到,我的答案对你有帮助。全新的SO帐户,所以我现在还不能+1,显然地但我接受了。再次感谢。
$reg_pass = $formData->{'reg_pass'};
$reg_pass_conf = $formData->{'reg_pass_conf'};

$output = array('email' => $reg_email, 'pass' => $reg_pass, 'pass_conf' =>     $reg_pass_conf);
echo json_encode($output);