检索通过ajax发送的数据

时间:2018-07-28 00:47:28

标签: php json ajax

我正在使用ajax从文本区域发送数据:

$('a#btn-send').click(function()
{
    var user = $("input#user").val();
    var conv = $("input#conv").val();
    var msj = $("textarea#msj").val();  
    if(msj!=''){
        var data = '{user:' + user + ',msj:'+msj+',conv:'+conv+'}' ;
        $("textarea#msj").val('');

        $.ajax(
        {
           type: "POST",
           url: "messajes.php",
           data: data,
           cache: false,
           success: function()
           {
                parent.fadeOut('slow', function() {$(this).add();});
                toastr.options = {
                    "closeButton": true,
                    "debug": false,
                    "newestOnTop": false,
                    "progressBar": true
                }
                toastr.success("Message semt","Success");
           }
        });
    }
});

对于初学者来说,我不知道这是否是发送数据的正确方法,但是我之前仅用一个数据元素(?)进行过此操作,我的意思是,仅使用“ id”。现在,我尝试发送多个数据,但无法使用php控制器捕获它:

if ($_SERVER['REQUEST_METHOD'] == 'POST'){
    include_once('conection.php');
    $connection = connect();
    if(isset($_POST['msj'])){
        $msj = $_POST['mjs'];
        $conv = $_POST['conv'];
        $user = $_POST['user'];
        $sql = "INSERT INTO messages (msj, conversation, user) VALUES('$msj',$conv,'$user')";
        $statement = $connection->prepare($sql);
        $statement->execute();
    }
}

有什么我想念的吗?

我猜我必须使用JSON编码/解码数据,但我不是专业人士,并且没有找到解决此确切情况的任何示例。

编辑

现在我在Jquery代码中有了这个

$('a#btn-enviar').click(function()
{
    var user = $("input#user").val();
    var conv = $("input#conv").val();
    var msj = $("textarea#msj").val();  

    if(msj!=''){
       var data = {user: user, msj: msj, conv: conv};
       $("textarea#msj").val('');

        $.ajax(
        {
           type: "POST",
           url: "mensajes.php",
           data: data,
           dataType: 'json',
           cache: false,
           success: function()
           {
                //code
           }
        });
    }
});

和php如下:

if ($_SERVER['REQUEST_METHOD'] == 'POST'){
    include_once('conectar.php');
    $conexion = conectar();

    if(isset($_POST['data'])){
        $data = json_decode($_POST['data']);
        $msj = $data->msj;
        $conv = $data->conv;
        $user = $data->user;

        $sql = "INSERT INTO messages(conversation, msj, user) VALUES ($conv, '$msj', '$user')";
        $statement = $conexion->prepare($sql);
        $statement->execute();
    }

}

1 个答案:

答案 0 :(得分:1)

不引用数据。您正在制作数据字符串。应该是

 var data = {user: user, msj: msj, conv: conv};

如果您使用的是JSON,请在dataType: 'json'中发送$.ajax()

$.ajax(
    {
       type: "POST",
       url: "messajes.php",
       data: data,
       dataType: 'json',
       cache: false,
       success: function()
       {
            //code
       }
    });

您的PHP代码应该是

if(isset($_POST['user'], $_POST['msj'], $_POST['conv'])){

    include_once('conectar.php');
    $conexion = conectar();


    $msj = $_POST['msj'];
    $conv = $_POST['conv'];
    $user = $_POST['user'];


    $sql = "INSERT INTO messages(conversation, msj, user) VALUES (?, ?, ?)";
    $statement = $conexion->prepare($sql);
    $statement->execute(array($conv, $msj, $user));
}

您直接在查询中使用变量,因此即使看起来像这样,语句也无法准备。我已经根据PDO准备好的语句更改了代码,如果您使用的是mysqli,请相应地更改代码。

mysqli:http://php.net/manual/es/mysqli.prepare.php

pdo:http://php.net/manual/en/pdo.prepare.php

如果此代码用于插入数据库并通知用户成功插入,则显然您不需要dataType:'json'dataType:'text'可以完成此工作。然后,您可以在PHP成功插入后回显一些标识符,例如echo 'TRUE';,并在JavaScript中可以检查文本TRUE并通知用户。