将值从JQUERY传递给PHP,并返回JSON

时间:2016-07-16 03:48:51

标签: php jquery json ajax

当通过ajax从jquery调用php时,有任何响应。我更改了dataType并将json改为html。我认为问题是,对于ajax调用永远不会触发php代码,似乎$_POST['retriveForm']永远不会带有值。

PHP:

if(isset($_POST["retriveForm"])) {
    $data_json =array();
    $id  = $_POST['retriveForm'];
    $sql = "SELECT * FROM mytable WHERE Id = $id";
    while ($row = mysqli_fetch_array($db->consulta($sql)) {
            $data_json  = array('item1' => $row['item1'],'item2' => $row['item2']) ;
    }
    $data_json['item_array'] = call_a_function_return_array();//this works
    echo json_encode($data_json);
}

和jQuery:

$(document.body).on('click', '.edit', function() {
    var id = $(this).data('id');
    $.ajax({
        type: "POST",
        url: "is_the_same_page.php",
        data: {
            retriveForm: id
        },
        dataType: "json",
        success: function(response) {
            $('#myForm').find('input').eq(1).val(response.item1);
        }
    });
});

如果这可能很重要,代码就在同一页面中。

1 个答案:

答案 0 :(得分:0)

由于AJAX代码在同一个脚本中,因此请确保在这种情况下不输出任何普通的HTML。在输出任何HTML之前,您的PHP代码应该位于脚本的最开头。并且您应该在回显JSON之后退出脚本。否则你的JSON将与HTML混合在一起,jQuery无法解析响应。

此外,您未在循环中正确添加$data_json。您每次都要覆盖变量,而不是按下它。

<?php
// code here to set up database connection
if(isset($_POST["retriveForm"])) {
    $data_json =array();
    $id  = $_POST['retriveForm'];
    $sql = "SELECT * FROM mytable WHERE Id = $id";
    while ($row = mysqli_fetch_array($db->consulta($sql)) {
        $data_json[]  = array('item1' => $row['item1'],'item2' => $row['item2']) ;
    }
    $data_json['item_array'] = call_a_function_return_array();//this works
    echo json_encode($data_json);
    exit();
}
?>
<html>
<head>
...

然后在success函数中,您需要为response的元素编制索引,因为它是一个数组,而不是一个对象。