2017-08-21 64 views
0

我想解析使用jQuery/JavaScript從PHP文件發送爲jQuery響應的JSON字符串。解析從PHP文件發送爲AJAX響應的JSON字符串

Ajax調用:

<script> 

      $(document).ready(function(){ 

       var query = $("#editor").html().replace(/(<([^>]+)>)/ig,""); 
         $.ajax({ 
          type: "POST", 
          url: "app/query_db.php", 
          data: "q="+query, 
          success: function(resp){  
           if(resp) { 
            alert("Response : "+resp); 
            $("#res_data").html(resp); 

           } 
           else{ 
            alert("Response: Failed") 
           } 
         }); 
        return false; 
       }); 

      }); 
     </script> 

PHP文件:

$db_conn = new db_connect(); 
    $conn = $db_conn->connectToDB($DBHost,$DBName,$DBUser,$DBPwd); 

    $query_res = array(); 


    if (fill_numeric_array_with_query_assoc($query_res, $sql_query, $conn)) { // Function to execute the query and fill the result 
     //do nothing 
    } else { 
     echo("Error description: " . mysqli_error($conn)); // Error message to display if failed to fetch the data 
     exit(); 
    } 
$data = json_encode($query_res); 
    echo $data; 

Result: [{"uid":"admin","pwd":"xyz"},{"uid":"guest","pwd":"abc"}] 

每當我試着分析上面的JSON字符串,我用0和1爲鍵結束了和其他的東西,值。奇怪的是,當我複製這個結果並將它分配給JavaScript中的變量時,它正確地解析了字符串。

試圖將其解析爲AJAX響應時,不知道發生了什麼問題。

解析的JSON字符串作爲AJAX響應時

表格式:

uid  pwd 

admin xyz 

guest abc 
+0

「每當我嘗試解析上面的json字符串時,我會以0和1作爲關鍵字並將其他值作爲值結束。」是的,這是正確的,因爲它是一個包含兩個對象的數組。第一個對象位於數組中的索引0處,第二個對象位於索引1處。您期望什麼? – ADyson

+1

你的JSON是一個數組,它有數字鍵,因此'0'和'1'? – adeneo

+0

你想用這個對象嘗試什麼?想要追加在表中? –

回答

0

這將需要的數據和將每個對象轉換成:當在javascript分配給變量

Image attached

響應在一張桌子裏排。我將假設#res_data是一個空的<table>元素。

$.ajax({ 
    type: "POST", 
    url: "app/query_db.php", 
    data: "q=" + query, 
    dataType: "json", 
    success: function(resp) { 
    if (resp) { 
     alert("Response : " + resp); 
     $("#res_data").empty(); 
     if (resp.length > 0) { 
     var header = "<tr>"; 
     for (var key in resp[0]) { 
      "<th>" + key + "</th>"; 
     } 
     header += "</tr>"; 
     $("#res_data").append(header); 
     var rows = ""; 
     for (var i=0; i< resp.length;i++) { 
      rows += "<tr><td>" + resp[i].uid + "</td><td>" + resp[i].pwd + "</td></tr>"; 
     } 
     $("#res_data").append(rows); 
     } 
     else { alert("No data returned"); } 
    } else { 
     alert("Response: Failed") 
    } 
    } 
}); 

請注意額外的ajax選項:dataType: "json"。這個很重要。由於您的PHP不會發送任何頭文件來告訴客戶端將響應解釋爲JSON,因此它可能會將其解釋爲文本。所以你必須添加dataType:"json",以便jQuery知道該怎麼做,並將響應直接轉換爲JS對象。那麼你應該沒有問題。如果你不這樣做,那麼它會將它視爲一個字符串,然後一次循環一個字符,這將導致你在問題中顯示的奇怪輸出。

+0

感謝您的回覆,但我正在尋找通過從json字符串中提取鍵動態創建表頭 – Santosh

+0

好吧,您可以循環訪問數組中的第一個對象並提取鍵。你不知道該怎麼做,我可以創建這也是一個例子。你會用一個for ...在循環 – ADyson

+0

下面是用於創建表的JavaScript代碼:\t \t \t \t \t \t \t 變種COL = []; 爲(VAR I = 0; I Santosh