使用JSON提交表单并使用PHP读取它

时间:2014-10-22 15:51:58

标签: php json

我似乎无法弄清楚这一点,我已经尝试了一切。我希望表单以JSON的形式提交我的数据,然后前往PHP页面,从中输出JSON数据的结果。

我将它设置如下,但这绝对没有。

表格代码:

  <form name="login" onsubmit="SendForm();">
  <input class="textbox" type="text" name="username" placeholder="Username"><p>
  <input class="textbox" type="password" name="password" placeholder="Password"><p>
  <br><input class="submit" type="submit" value="Log in!">
  </form>

发送表格:

function SendForm() {
 var username = document.login.username.value;
 var password = document.login.password.value;
 var xhr = new XMLHttpRequest();
 xhr.open("POST", "/");
 xhr.setRequestHeader('Content-Type', 'application/json; charset=utf-8');

 var postData = {
  object: { child1: username, child2: password }
 }
 xhr.send(postData);
 return true;
} 

PHP代码阅读:

<?php
$json = @file_get_contents('php://input');
$array = json_decode($json, true);
if (empty($array))
    echo 'empty';
else
    print_r($array);
?>

任何帮助都会很棒。谢谢!

4 个答案:

答案 0 :(得分:0)

我注意到的是你应该在你的SendForm函数中返回false以取消提交并阻止表单更改页面。否则表单将作为常规html表单,将数据发送到&#34; action&#34; param等。

此外,您尝试发送JSON但只传递一个对象。您应该将对象序列化为JSON

Serializing an object to JSON

PHP需要在输入中使用正确的json字符串,因此json_decode无法在您的情况下将字符串解码为JSON,并且您将获得#34;空的&#34;。你可以使用var_dump($ json);查看$ json的内容并检查是否有正确的json字符串

答案 1 :(得分:0)

您需要调用JSON.stringify()将Javascript对象转换为JSON:

xhr.send(JSON.stringify(postData));

答案 2 :(得分:0)

您的代码中存在以下几个问题: 1.你不应该在按钮上使用表单onSubmit()但是onclick()。 2.正如Barmar所说,你需要使用JSON.stringify() 3.不确定xhr.open("POST", "/");在您的情况下是否正确(我已将其替换为test.php进行测试)

<script>
     function SendForm() {
         var username = document.login.username.value;
         var password = document.login.password.value;
         var xhr = new XMLHttpRequest();
         xhr.open("POST", "test.php");
         xhr.setRequestHeader('Content-Type', 'application/json; charset=utf-8');

         var postData = {
             object: { child1: username, child2: password }
         }
         xhr.send(JSON.stringify(postData));
     }
 </script>

 <form name="login">
     <input class="textbox" type="text" name="username" placeholder="Username"><p>
     <input class="textbox" type="password" name="password" placeholder="Password"><p>
     <br><input class="button" type="button" onclick="SendForm();" value="Log in!">
 </form>

答案 3 :(得分:0)

试试这个:

$ch=curl_init(@file_get_contents('php://input'););
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$r=curl_exec($ch);
curl_close($ch);

$arr = json_decode($r,true);
if (empty($arr))
    echo 'empty';
else
    print_r($arr);

注意:您必须启用Curl。