无法从php ajax获取价值

时间:2018-06-24 17:40:56

标签: php json ajax html5

无法从PHP真正的AJAX中获得价值。

我的php代码是

<?php
$name =  $_POST['name'];
$hobby = $_POST['hobby'];
if (!empty($name and $hobby)){
echo 'Data was succesfully captured';
}else {
echo 'Data was not captured'
}

我的html代码是

<div id="result"></div>

<form method="post">
<input name="name" type="text" id="name">
<br>
<input name="hobby" type="text" id="hobby">
<input name="snd_btn" type="button" id="snd_btn" value="Save">
</form>

JS

$(document).ready(function(){
$('#snd_btn').click(function() {
var name = $('#name').val();
var hobby = $('#hobby').val();
$.ajax({
 url: "save.php",
 type: "POST",
dataType: 'json',
data: { name, hobby,
success: function(result) {
$('#result').html(result);
  },
}
 });
 });
   });

如果我将js更改为

success: function() {
$('#result').html('Data was succesfully captured');
},

它可以工作,但不能通过php

3 个答案:

答案 0 :(得分:0)

这是错误的。

if (!empty($name and $hobby)) {

请替换为:

if (!empty($name) and !empty($hobby)) {

您必须检查每个变量的空性。

答案 1 :(得分:0)

首先,您要检查ajax调用是否成功完成

如果ajax调用成功完成,则

通过在控制台中打印来检查成功数据的响应。

您的php代码应该是这样

<?php
$name = $_POST['name']; 
$hobby = $_POST['hobby']; 
 if ($name and $hobby ){ 
        echo json_encode('Data was succesfully captured');
     }else {
        echo json_encode('Data was not captured'); 
    }

从php中,您必须以json的形式返回数据。

和js方面:

$(document).ready(function(){ 
    $('#snd_btn').click(function() { 
        var name = $('#name').val(); 
        var hobby = $('#hobby').val();
        $.ajax({ 
             url: "save.php", 
             type: "POST", 
             dataType: 'json', 
             data: { name:name, hobby:hobby}  // data in { key : value}
             success: function(result) { 
             res = JSON.parse(res);
             console.log(res);// display in developertools > console
                 $('#result').html(res); 
             },
 }); }); });

答案 2 :(得分:0)

问题:

  • hobby之后是“,”之前的“}”。
  • 然后,您将有一个容易出错的附加“}”。 success回调的结束符“}”(顺便说一句,删除“,”)之后的那个。
  • 您忘了在行回显“未捕获数据”末尾的分号。
  • 正如您定义的dataType: JSON一样,ajax调用需要JSON编码的响应。因此,在PHP中,您必须使用json_encode对响应字符串进行编码。
  • 由于没有错误回调(error: function(...){...}),因此看不到任何错误。因此,定义一个。下面是一个示例。

建议:

  • 如下定义data对象。
  • PHP对空值的检查应如下进行。
  • 还必须检查发布值是否已设置。
  • 不向用户显示任何特定的错误详细信息。只需向他们显示一条通用的用户友好消息即可。因此,不要像我那样做-通过在控制台中打印错误详细信息:-)

index.php:

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
        <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=yes" />
        <meta charset="UTF-8" />
        <!-- The above 3 meta tags must come first in the head -->

        <title></title>

        <script src="https://code.jquery.com/jquery-3.2.1.min.js" type="text/javascript"></script>

        <script type="text/javascript">
            $(document).ready(function () {
                $('#snd_btn').click(function () {
                    var name = $('#name').val();
                    var hobby = $('#hobby').val();

                    $.ajax({
                        method: 'POST',
                        dataType: 'json',
                        url: 'save.php',
                        data: {
                            'name': name,
                            'hobby': hobby
                        },
                        success: function (result, textStatus, jqXHR) {
                            $('#result').html(result);
                        },
                        error: function (jqXHR, textStatus, errorThrown) {
                            alert('Error! See the console');

                            console.log(textStatus);
                            console.log(errorThrown);
                            console.log(jqXHR);
                        },
                        complete: function (jqXHR, textStatus) {
                            //...
                        }
                    });
                });
            });
        </script>
    </head>
    <body>

        <div id="result"></div>

        <form method="post">
            <input name="name" type="text" id="name">
            <br>
            <input name="hobby" type="text" id="hobby">
            <input name="snd_btn" type="button" id="snd_btn" value="Save">
        </form>

    </body>
</html>

save.php:

<?php

/*
 * Check if the values are set.
 * I used here the short "null coalescing operator".
 * Search for it in the link below.
 *
 * @link https://secure.php.net/manual/en/language.operators.comparison.php Comparison Operators.
 */
$name = $_POST['name'] ?? '';
$hobby = $_POST['hobby'] ?? '';

if (!empty($name) && !empty($hobby)) {
    $response = 'Data was succesfully captured';
} else {
    $response = 'Data was not captured';
}

echo json_encode($response);