Frage
Ich habe ein Skript zum Aktualisieren einer Datenbanktabelle. Ich muss ein JSON -Array zurückgeben und einige Tische mit JQuery aktualisieren.
Mein PHP -Skript:
$update = mysql_query("UPDATE PLD_SEARCHES SET STATUS = 1, TOTAL_RESULTS = ".$scrapper->getTotalResults().",RESULTS = $resultCounter WHERE ID = ".$searchId);
$output = array("status"=>"COMPLETED","results"=>$resultCounter,"totalResults"=>$scrapper->getTotalResults());
echo json_encode($output);
JQuery Code:
$("button").live("click", function(event){
event.preventDefault();
$.getJSON("startsearch.php",{ searchId: $(this).val() }, function(data){
alert(data[0].status);
});
Jetzt ... das Problem ist, dass wenn ich benutze $.post("startsearch.php",{ searchId: $(this).val() }, function(data))
Das Skript wird ausgeführt und ich bekomme einen schönen Alarm mit und definierter Wert. Wenn ich den Parameter "JSON" hinzufüge, wird das Skript nicht mehr ausgeführt. Ich habe versucht, GetJson zu verwenden, aber auch das gleiche Problem.
Hat jemand irgendwelche Ideen? Ich bin verzweifelt ... das hat mich seit fast einer Woche nervt und ich habe es immer noch nicht geschafft, es zu lösen.
Lösung
Stellen Sie in Ihrer PHP -Datei sicher, dass Sie den richtigen Inhaltstyp festlegen:
header("Content-type: application/json; charset=utf-8");
so dass jQuery richtig eval
Die Antwort in ein JSON -Objekt.
Andere Tipps
Sie können Ihre Antwortdaten wie folgt erreichen:
alert(data.status);
alert(data.results);
alert(data.totalResults);
Bitte verwenden Sie keine Warnung, installieren Sie Firebug in Ihr Firefox oder aktivieren Sie die JavaScript -Konsole in Chrome oder Safari. Danach können Sie verwenden console.log(data);
Ich vermute, dass Daten kein Array sind. Schauen Sie sich auch die jeweils () Exmaple auf den Jquery -Dokumenten an http://docs.jquery.com/ajax/jquery.getjson
Nun, ich vertraue darauf json2.js
Um die von der AJAX -Anfrage zurückgegebenen JSON -Daten zu analysieren. Sie können es herunterladen http://json.org. Diese Bibliothek bietet eine bessere Möglichkeit, eine Saite zu analysieren, und stellt eine Ausnahme aus, wenn der Stich nicht in JSON ist.
Ich schreibe immer meine Ajax -Anfrage wie folgt:
$.post(URL,
{ PARAM },
function(data){
try {
var r = JSON.parse(data);
//this for your code above
alert (r.status); //should be 'COMPLETED'
}
catch (e) {
//data is not in json format, or there are another exception in try block
//do something about it
alert('Exception occured, please check the data!');
}
});
Bei der Verarbeitung von JSON wird das Array in PHP in JSON ein variables Mitglied. Also, wenn es in Ihrem PHP ist, ist es $output['status']
, dann wird es in JSON sein r.status
.