2017-07-03 52 views
0

我想从表中检索数据使用PHP和AJAX,此刻我能够显示我的查询以json格式的结果,我想要做的是选择例如我得到这个数组:从表中使用PHP和AJAX加载数据

{data:[{IdProduct:“1”,Name:“Name Here ..........”,...} ]}

比如我要选择唯一的名字,我试着这样做:

function LoadProductos() { 

$.ajax({ 
    url: '../../class/loadProd.php', 
    method: 'POST', 
    success: function (data) { 
     var aRC = JSON.parse(data); 

     for (var i = 0; i < aRC.length; i++) { 
     console.log(aRC[i].Name); 
     } 
    } 

    }); 
} 

但是这并没有显示任何东西,我该怎么做?这是我的PHP代码:

while($row = mysqli_fetch_array($registros)) { 

    $table.='{ 
     "IdProduct":"'.$row['IdProduct'].'", 
     "Name":"'.$row['Name'].'", 
     "Description":"'.$row['Description'].'", 
     "ImagePath":"'.$row['ImagePath'].'" 
    },'; 

    $table = substr($table, 0, strlen($table) -1); 

    echo '{"data":['.$table.']}'; 
} 
+0

您试图在返回时解析JSON数据,但您并未在PHP中创建vaild JSON数据。使用'json_encode()',不要尝试自己编写JSON代码。 –

+0

不要建立你自己的json字符串。只需创建一个PHP数组并使用[json_encode()](http://php.net/manual/en/function.json-encode.php)对其进行编码。 –

+0

最后两行($ table = ...和echo ...)应该在循环之后。 – colburton

回答

3

有几个你需要在你的代码改变的事情,比如:

  • 这不是你应该如何创建一个json字符串。在while()循环前创建一个空数组,并在循环的每次迭代中将行详细信息追加到此数组中。在退出循环后,只需将json_encode()函数应用于结果数组即可获得最终的json字符串。

    $table = array(); 
    while($row = mysqli_fetch_array($registros)) { 
        $table[]= array(
         'IdProduct' => $row['IdProduct'], 
         'Name' => $row['Name'], 
         'Description' => $row['Description'], 
         'ImagePath' => $row['ImagePath'] 
        ); 
    } 
    echo json_encode($table); 
    
  • 既然你希望从服务器JSON字符串,添加此设置dataType:'json'您的AJAX请求。 dataType是您期待从服务器返回的数据类型。而在success()回调函数中,只需循环浏览json结果即可获取相关数据。

    function LoadProductos() { 
        $.ajax({ 
         url: '../../class/loadProd.php', 
         method: 'POST', 
         dataType: 'json', 
         success: function (data) { 
          for (var i = 0; i < data.length; i++) { 
           alert(data[i].Name); 
          } 
         } 
        }); 
    } 
    
+0

我做了更改,但现在我没有得到任何类型的信息(来自echo json_encode)并且也没有错误消息 – User1899289003

+0

@ User1899289003几件事情在这里调试,1)你是否调用了这个'LoadProductos()'函数? 2)在'success'回调函数中'alert(data)',看看你到了那里。 –

+0

是的!我打电话给我的功能,并警告(数据),我也打开浏览器控制台,看看发生了什么,功能执行良好,但在预览/响应窗口没有什么,我改变回声json_encode($表)回声“你好”并正常工作。 – User1899289003

2

首先,你不应该呼应的JSON数据循环。应该是以外的这个循环。 你不应该建立你自己的json数据。

让我们构建一个看起来像你想要的json响应的数组。然后,我们将使用功能json_encode()将其编码为一个适当的JSON字符串:

// Define the response array 
$response = [ 
    'data' => [] 
]; 

while($row = mysqli_fetch_array($registros)) { 

    // Push a new array to 'data' array 
    $response['data'][] = [ 
     'IdProduct' => $row['IdProduct'], 
     'Name'  =>.$row['Name'], 
     'Description' => $row['Description'], 
     'ImagePath' => $row['ImagePath'] 
    ]; 
} 

// Now, let's encode the data: 
echo json_encode($response); 
+0

我也试过这个,但我从上面的答案得到错误。 – User1899289003

+0

@ User1899289003检查您的服务器错误日志,看看它是否说了些什么。你正在运行什么PHP版本/操作系统? –

+0

没有错误消息或日志,我使用PHP 5.6.30 – User1899289003

0

在你的PHP文件,根据此做出改变: -

$outp = array(); 
$outp = $res->fetch_all(MYSQLI_ASSOC); 

为了确保json_encode不返回null

function utf8ize($d) { 
if (is_array($d)) { 
    foreach ($d as $k => $v) { 
     $d[$k] = utf8ize($v); 
    } 
} else if (is_string ($d)) { 
    return utf8_encode($d); 
} 
return $d; 
} 
echo json_encode(utf8ize($outp)); 

你的JavaScript是好的,你只需要在PHP中更改代码。

相关问题