Jquery中没有从php json_encode接收数据

时间:2017-05-16 16:15:20

标签: javascript php jquery json ajax

我需要帮助我的代码,因为我一直在浏览互联网寻找我的问题的答案,但仍然可以得到可以解决我的问题的答案。我是一个使用AJAX的新人。我想将php文件中json_encode的数据显示给我的AJAX,以便AJAX可以将它传递给HTML中的文本框。

我的问题是php文件中的Json_encode有来自json格式的查询的数据但是当我将它传递给ajax成功时,function(users)为空。 Console.log也是空数组。我已经尝试过使用JSON.parse,但我的代码仍然出错了,因为用户本身是空的。请任何帮助将不胜感激。谢谢。

car_detail.js

    $(document).ready(function() {


        function $_GET(q,s) {
            s = (s) ? s : window.location.search;
            var re = new RegExp('&'+q+'=([^&]*)','i');
            return (s=s.replace(/^\?/,'&').match(re)) ?s=s[1] :s='';
        }
            var car_rent_id1 = $_GET('car_rent_id');
            car_rent_id.value = car_rent_id1;

                    $.ajax({  
        type: 'POST',
        url: "http://localhost/ProjekCordova/mobile_Rentacar/www/php/car_detail.php",
        dataType: "json",
        cache: false, 
        data: { car_rent_id: this.car_rent_id1 },
        success:  function(users) {

        console.log(users);
        $('#car_name').val(users.car_name); 

        }
    });
    });

car_detail.php

    $car_rent_id = $_GET['car_rent_id'];   
    $query = mysql_query("SELECT c.car_name, c.car_type, c.car_colour, 
    c.plate_no, c.rate_car_hour, c.rate_car_day, c.car_status, 
    r.pickup_location
    FROM car_rent c
    JOIN rental r ON c.car_rent_id=r.car_rent_id
    WHERE c.car_rent_id = $car_rent_id");

    $users = array();
      while($r = mysql_fetch_array($query)){
    $user = array(
        "car_name" => $r['car_name'], 
        "car_type" => $r['car_type'], 
        "car_colour" => $r['car_colour'], 
        "plate_no" => $r['plate_no'], 
        "rate_car_hour" => $r['rate_car_hour'], 
        "rate_car_day" => $r['rate_car_day'], 
        "car_status" => $r['car_status'], 
        "pickup_location" => $r['pickup_location']
        );
         $users[] = $user;
    // print_r($r);die;
    }
    print_r(json_encode($users)); //[{"car_name":"Saga","car_type":"Proton","car_colour":"Merah","plate_no":"WA2920C","rate_car_hour":"8","rate_car_day":"0","car_status":"","pickup_location":""}]

car_detail.html

  <label>ID:</label>
                <input type="text" name="car_rent_id" id="car_rent_id"><br>

                <label>Car Name:</label>
                <div class = "input-group input-group-sm">
                    <span class = "input-group-addon" id="sizing-addon3"></span>
                    <input type = "text" name="car_name" id="car_name" class = "form-control" placeholder = "Car Name" aria-describedby = "sizing-addon3">
                </div></br>

                <label>Car Type:</label>
                <div class = "input-group input-group-sm">
                    <span class = "input-group-addon" id="sizing-addon3"></span>
                    <input type = "text" name="car_type" id="car_type" class = "form-control" placeholder = "Car Type" aria-describedby = "sizing-addon3">
                </div></br>

3 个答案:

答案 0 :(得分:2)

删除this中的this.car_rent_id1cache: false,这适用于您使用{AJA}的HEADGET,但在您的POST中PHP使用$_GET。并且car_rent_id未定义,您的函数$_GET(q,s)需要两个参数,只传递一个参数。

$(document).ready(function() {
    function $_GET(q,s) {
        s = (s) ? s : window.location.search;
        var re = new RegExp('&amp;'+q+'=([^&amp;]*)','i');
        return (s=s.replace(/^\?/,'&amp;').match(re)) ?s=s[1] :s='';
    }
    var car_rent_id1 = $_GET('car_rent_id'); // missing parameter
    car_rent_id.value = car_rent_id1; // where was this declared?

    $.ajax({
        type: 'POST',
        url: "http://localhost/ProjekCordova/mobile_Rentacar/www/php/car_detail.php",
        dataType: "json",
        data: { car_rent_id: car_rent_id1 },
        success:  function(users) {
            console.log(users);
            $('#car_name').val(users.car_name);
        }
    });
});

您也可以使用$.post(),帖子只是$.ajax()

的简写
$(document).ready(function() {
    function $_GET(q,s) {
        s = (s) ? s : window.location.search;
        var re = new RegExp('&amp;'+q+'=([^&amp;]*)','i');
        return (s=s.replace(/^\?/,'&amp;').match(re)) ?s=s[1] :s='';
    }
    var car_rent_id1 = $_GET('car_rent_id');
    car_rent_id.value = car_rent_id1;

    $.post('http://localhost/ProjekCordova/mobile_Rentacar/www/php/car_detail.php', { car_rent_id: car_rent_id1 }, function (users) {
        console.log(users);
        $('#car_name').val(users.car_name);
    });
});

并在PHP更改

$car_rent_id = $_GET['car_rent_id']; 

$car_rent_id = $_POST['car_rent_id'];

答案 1 :(得分:0)

这是使用.done / .fail / .always

的代码框架
<script
  src="https://code.jquery.com/jquery-1.12.4.min.js"
  integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ="
  crossorigin="anonymous"></script>

<script>
$(function(){
  $.ajax({
    url: 'theurl',
    dataType: 'json',
    cache: false
  }).done(function(data){
    console.log(data);
  }).fail(function(data){
    console.log(data);
  }).always(function(data){
    console.log(data);
  });
});
</script>

我已经调整了你的代码,所以你可以看到错误,用这个替换ajax调用

<script>
    $.ajax({
      url: "theurl",
      dataType: "json",
      data: { car_rent_id: car_rent_id1 },
      success: function(users) {
        console.log(users);
        $('#car_name').val(users.car_name);
      },
      error: function(data) {
        console.log(data);
        alert("I failed, even though the server is giving a 200 response header, I can't read your json.");
      }
    });
</script>

答案 2 :(得分:0)

关于此的一些建议,我会按照jQuery API来尝试查看请求失败的地方http://api.jquery.com/jquery.ajax/。此外,我将使用jQuery访问输入文件的ID。例如:$("#theID").val()