2016-06-20 63 views
6

我想返回json數據,但我的代碼不工作。我沒有收到任何錯誤消息。我有index.php,ajax.php和db.php。 Db.php正在工作。但我的ajax代碼不起作用。我的錯誤在哪裏?使用php返回json數據

的index.php:

<!DOCTYPE html> 
<html> 
<head> 
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script> 
</head> 
<body> 
    <div id="test" style="width:500px;height:400px; margin:20px auto;"></div> 
<script> 
    $(window).load(function() { 
     $.ajax({ 
      dataType: "json", 
      url: 'ajax.php', 
      success:function(data){   
       $("#test").html(data); 
      } 
     }); 
    }); 
</script> 
</body> 
</html>  

Ajax.php:

<?php 
require 'db.php'; 
$query="select lat,lng from locations order by id"; 
$result = pg_query($link, $query); 
if (!$result) { 
echo "An error occurred_xxx.\n"; 
}else { 
$arr = pg_fetch_all($result); 
echo json_encode($arr); 
} ?> 
+2

請問您的開發者控制檯顯示的任何錯誤?你可以在網絡面板上顯示AJAX請求的輸出嗎? –

+0

我現在導航到http://localhost/php/index.php。 –

回答

6

如果你希望JSON需要,無論將其發送。當你的腳本錯誤時,你在做什麼,正在發送text/html。試試這個:

header("Content-Type: application/json"); 
require 'db.php'; 
$query="select lat,lng from locations order by id"; 
$result = pg_query($link, $query); 
$response = array(); 
if (!$result) { 
    $response = array(
     'status' => false, 
     'message' => 'An error occured...' 
    ); 
}else { 
    $response = array(
     'status' => true, 
     'message' => 'Success', 
     'data' => ph_fetch_all($result) 
    ); 
} 

echo json_encode($response); 

現在,如你所見,我們發送的實際JSON,通過設置正確Content-Type頭,而不是混合純文本和JSON起來。

處理您的jQuery內這種反應,只需調理響應:

$(window).load(function() { 
    $.ajax({ 
     dataType: "json", 
     url: 'ajax.php', 
     success:function(data){   
      if(!data.status) { 
       $("#test").html("ERROR: " + data.message); 
      } else if(data.status) { 
       $("#test").html(data); 
      } 
     } 
    }); 
}); 
+0

非常感謝。 –

+0

我試過這個例子我得到了json_decode()期望參數1是字符串,數組給出了什麼意思? –

+0

@FatihDoğan道歉,它應該已經'json_encode()'。 – Darren