質問
データベーステーブルを更新するためのスクリプトがあります。 JSONアレイを返し、JQueryでテーブルを更新する必要があります。
私のPHPスクリプト:
$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コード:
$("button").live("click", function(event){
event.preventDefault();
$.getJSON("startsearch.php",{ searchId: $(this).val() }, function(data){
alert(data[0].status);
});
さて...問題は、私が使用する場合です $.post("startsearch.php",{ searchId: $(this).val() }, function(data))
スクリプトが実行され、Valueが未定義で素敵なアラートを受け取ります。パラメーター「JSON」を追加すると、スクリプトは実行されなくなります。私はGetJsonを使用しようとしましたが、再び同じ問題です。
誰かがアイデアを持っていますか?私は必死です...これはほぼ1週間私を悩ませてきましたが、私はまだそれを解決することができませんでした。
解決
PHPファイルで、正しいコンテンツタイプを必ず設定してください。
header("Content-type: application/json; charset=utf-8");
jqueryが正しくできるように eval
JSONオブジェクトへの応答。
他のヒント
次のように応答データを届けることができます。
alert(data.status);
alert(data.results);
alert(data.totalResults);
アラートを使用せず、FirefoxにFirebugをインストールするか、ChromeまたはSafariのJavaScriptコンソールを有効にしてください。その後、使用できます console.log(data);
私の推測では、データは配列ではないということです。また、jqueryドキュメントの各()exmapleを見てください http://docs.jquery.com/ajax/jquery.getjson
まあ、私は信頼しています json2.js
Ajaxリクエストから返されたJSONデータを解析するため。からダウンロードできます http://json.org. 。このライブラリは、あらゆる文字列を解析するより良い方法を提供し、刺し傷がJSONにない場合は例外を投げます。
私はいつもこのようなajaxリクエストを書きます:
$.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!');
}
});
JSONを処理すると、PHPの配列はJSONの可変メンバーになります。したがって、あなたのPHPにある場合はそうです $output['status']
, 、JSONでは、そうなるでしょう r.status
.