数据类型错误?

bxjv4tth  于 2021-06-23  发布在  Mysql
关注(0)|答案(4)|浏览(489)

我使用ajax向javascript函数返回一个查询,但是返回json编码时遇到了一个问题。我可能在某个地方有一个数据类型错误,但我想检查一下这里的一些建议。
这是我的ajax请求:

$.ajax({
            url: 'testajax.php',
            method: 'POST',
            data: {value},
            dataType:'json',
            success: function(data){
                console.log(data);}
});

这是我的php脚本:

<?php
require 'login.php';
$connection = new mysqli($host, $user, $pword, $database, 3306);
$insertquery = $connection->prepare("SELECT tracking_type, tracking_change_date, vessel_fcm_new, vessel_hull_id_new, vessel_name_new, vessel_length_new, vessel_manufacturer_new, vessel_manufacturer_id_new, vessel_year_new, vessel_value_new, owner_id_new, loss_payee_id_new, policy_id_new, policy_start_date_new, policy_end_date_new FROM tracking WHERE tracking_type = ?");
$insertquery->bind_param("i", $trackingtype);
//$trackingtype = $_POST['value'];
$trackingtype = 1;
$insertquery->execute();
$insertquery->bind_result($tracking_type, $tracking_change_date, $vessel_fcm_new, $vessel_hull_id_new, $vessel_name_new, $vessel_length_new, $vessel_manufacturer_new, $vessel_manufacturer_id_new, $vessel_year_new, $vessel_value_new, $owner_id_new, $loss_payee_id_new, $policy_id_new, $policy_start_date_new, $policy_end_date_new);
while ($insertquery->fetch()){
    $data = array($tracking_type, $tracking_change_date, $vessel_fcm_new, $vessel_hull_id_new, $vessel_name_new, $vessel_length_new, $vessel_manufacturer_new, $vessel_manufacturer_id_new, $vessel_year_new, $vessel_value_new, $owner_id_new, $loss_payee_id_new, $policy_id_new, $policy_start_date_new, $policy_end_date_new);
    echo json_encode($data);
}

如果只有1行匹配这个查询,那么它就可以正常工作。但是,只要我添加另一个与select查询匹配的行,它就不会正确地返回到javascript函数,而是在浏览器中显示良好(如果您访问testajax.php)。
这是当前返回数据的方式。可能我使用的数据类型有错误:

["Insert","2018-05-26","JBL5693",null,"Makers Mark","22","sdgfsg3","256632asdasd",2014,263,"217","11",null,null,null]["Insert","2018-05-27","fFH465","FDDEE453","GIIGE","22","Shippers","2432465we",2014,205222,"Smith Jones","Capital One",null,null,null]
rseugnpd

rseugnpd1#

您应该做的是返回一个对象数组。不是多个对象。

$to_return = [];
while ($insertquery->fetch()){
    $data = array($tracking_type, $tracking_change_date, $vessel_fcm_new, $vessel_hull_id_new, $vessel_name_new, $vessel_length_new, $vessel_manufacturer_new, $vessel_manufacturer_id_new, $vessel_year_new, $vessel_value_new, $owner_id_new, $loss_payee_id_new, $policy_id_new, $policy_start_date_new, $policy_end_date_new);
    $to_return[] = $data;
}

echo json_encode($to_return);
hyrbngr7

hyrbngr72#

一定要保持

echo json_encode($data);

在while循环之外。

0mkxixxg

0mkxixxg3#

如果我只有1行匹配这个查询,那么它就可以正常工作了
所以将行保存在一个数组中,然后像这样发送整个数组

while ($insertquery->fetch()){
    $data[] = array($tracking_type, $tracking_change_date, $vessel_fcm_new, 
                $vessel_hull_id_new, $vessel_name_new, $vessel_length_new, 
                $vessel_manufacturer_new, $vessel_manufacturer_id_new, 
                $vessel_year_new, $vessel_value_new, $owner_id_new,     
                $loss_payee_id_new, $policy_id_new, $policy_start_date_new, 
                $policy_end_date_new);
}
echo json_encode($data);

编辑:
这个代码的一个简单测试是

$data[] = array('Insert','2018-05-26', 1);
$data[] = array('Insert','2018-05-26', 2);

echo json_encode($data);

这将产生

[
 ["Insert","2018-05-26",1],
 ["Insert","2018-05-26",2]
]

而不是你建议的样本输出。

ujv3wf0j

ujv3wf0j4#

问题是,每次通过循环都要打印一个列数组,因此json不能正确地编码为数组数组;您可以按如下方式修改代码:

$results = array();
while ($insertquery->fetch()) {
  $newResult = array($tracking_type, $tracking_change_date, ...);
  array_push($results, $newResult);
}
$encoded = json_encode($results);
echo $encoded;

将打印如下内容:

[
    ["Insert","2018-05-26","JBL5693", ...],
    ["Insert","2018-05-27","JBL5694", ...],
    ...
]

请注意,最好设计一个客户机<>服务器接口来使用对象数组,例如:

[
    {"tracking_type": "Insert", "tracking_change_date": "2018-05-26", "vessel_fcm_new": "JBL5693", ...},
    {"tracking_type": "Insert", "tracking_change_date": "2018-05-26", "vessel_fcm_new": "JBL5693", ...},
    ...
]

这种方法的优点是,客户机不需要知道列的顺序,而是可以直接访问它所关心的属性。

相关问题