2012-03-27 6 views
2

Ich habe eine AJAX-Seitenanforderung, die eine PHP-Datei verwendet, um Abfragen an meine MySQL-Datenbank zu behandeln. Die PHP-Datei funktioniert gut, aber aus irgendeinem Grund ist es nicht nett zu mir. Hier ist, was ich habe:JSON-Objekt undefined

function updateForm(){ 
     ID = $('#listings').val(); 
     $.ajax({ 
      type: "POST", 
      url: 'query.php', 
      data: "query=true" + 
        "&id=" + ID, 
      datatype: 'json', 
      success: function(data) { 
       alert(data); 
       updatePreview(); 
      } 
     }); 
    } 

gibt mir ein Popup mit:

{"results":[{"ID":"12","area":"Hoboken","bedrooms":"5","fullbath":"3","halfbath":"1","remarks":"No remarks to speak of.","sqft":"2500","photos":null,"price":"1000","fee":null,"realtor":"Jane Doe","phone":"555-555-5555","address":"10th & Willow","bix":"1"}]} 

aber sobald ich es ändern zu:

function updateForm(){ 
     ID = $('#listings').val(); 
     $.ajax({ 
      type: "POST", 
      url: 'query.php', 
      data: "query=true" + 
        "&id=" + ID, 
      datatype: 'json', 
      success: function(data) { 
       alert(data.results); 
       updatePreview(); 
      } 
     }); 
    } 

dem Popup gerade sagt nicht definiert.

Letztendlich möchte ich Informationen analysieren und meine Seite entsprechend aktualisieren, aber ich kann anscheinend nicht auf die Eigenschaften dieses JSON-Objekts zugreifen. Was ist los?

EDIT:

Hier ist der Code aus der PHP-Datei:

if (isset($_POST['query'])){ 
    if (isset($_POST['id'])){ 
     $query = 'SELECT * FROM bix WHERE ID=' . get_post('id'); 
     $listing = mysql_query($query); 
     print_json($listing); 
    } 
} 
function print_json($var){ 
    $output = array(); 
    while($row = mysql_fetch_assoc($var)) { 
     $output["results"][] = $row; 
    } 
    echo json_encode($output); 
} 

function get_post($var) 
{ 
    return mysql_real_escape_string($_POST[$var]); 
} 
+0

können Sie Ihren serverseitigen Code eingeben? –

+0

auch wenn Sie console.log() beides, was bekommen Sie? –

+0

vielleicht hast du das T in dataType nicht großgeschrieben ... – Timmerz

Antwort

1

haben Sie versucht, das T in dataType zu kapitalisieren, auf dem Ajax-Aufruf bereits?

1

Sie sollten console.log(data) stattdessen mit diesem können Sie die Tasten angezeigt, die Sie auf die Daten zugreifen können zu.

0

Versuchen Daten statt data.results oder Targeting die data.id oder data.area und sehen Sie mit, was es mit

2

aufkommt Wenn Sie eine Zeichenfolge in der Alert-Popup zeigt, bedeutet dies, dass die Daten a Zeichenfolge, nicht JSON. Für JSON wird [Objekt Objekt] angezeigt.

Überprüfen Sie den Antworttyp. Es sollte application/json oder application/javascript, nicht text/plain oder so ähnlich sein.

UPDATE: stellen Sie auch sicher, dass der Server die ganze Zeichenfolge nicht in Anführungszeichen zurückgibt. Z.B. "[..]" - es ist nur eine Zeichenfolge. Verwenden Sie also FireBug oder Chrome Developer Tools, um zu sehen, was die eigentliche Antwort ist. Es könnte helfen zu verstehen, warum jQuery nicht richtig damit umgehen kann.

+0

Das ist aber interessant, je nach dem jQuery docs ein Datentyp: 'json', soll das Heben für dich tun ... kannst du deinen Server Side Code posten? –

+0

ok es ist da oben – mavix

1

Ich glaube nicht, es json..it kommt zurück als String Ich glaube, ...

Verwendung als analysiert zurück kommt:

var x = jQuery.parseJSON(data); 
alert(x.results) 
+0

Es sollte aber. Die Dokumentation besagt, dass der Datentyp: 'json' ein JSON-Objekt und keine Zeichenfolge zurückgibt. – mavix

+0

hast du versucht, das T in dataType zu kapitalisieren, auf dem Ajax-Aufruf bereits? – Timmerz

+0

Ahhh, das war das Problem. – mavix

0

Als Eugene darauf hingewiesen, Daten ist eine Zeichenfolge . Versuchen Sie eval:

var stuff = eval(data); 
alert(stuff.results); 

EDIT: das funktioniert, aber jQuery.parseJSON ist wahrscheinlich kühler.