2016-06-20 17 views
6

Chcę przywrócić dane json, ale mój kod nie działa. Nie dostaję żadnego komunikatu o błędzie. Mam index.php, ajax.php i db.php. Db.php działa. Ale mój kod ajaxowy nie działa. Gdzie jest mój błąd?Powróć do danych json z php

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

Czy Twój deweloper konsola pokazuje żadnych błędów? Czy możesz wyświetlić dane wyjściowe żądania AJAX w panelu sieci? –

+0

Dostaję teraz nawigację do http: //localhost/php/index.php. –

Odpowiedz

6

Jeśli spodziewasz JSON trzeba wysłać go niezależnie. Co robisz, gdy błędy skryptu, wysyła text/html. Spróbuj tego:

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); 

Teraz jak zobaczysz, wysyłamy rzeczywistą JSON, poprzez ustawienie poprawnej Content-Type nagłówek i nie mieszanie zwykłego tekstu i JSON do góry.

Do obsługi tej odpowiedzi w swoim jQuery, po prostu warunkować odpowiedź:

$(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

dziękuję bardzo. –

+0

Próbowałem tego przykładu Mam json_decode() oczekuje parametru 1 na ciąg, tablica podana w co oznacza? –

+0

@ Przepraszam FatihDoğana, powinno to być 'json_encode()'. – Darren