2017-07-03 27 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中更改代碼。

相關問題