私はwpdbから特定のデータを取得するためにjqueryのAjax呼び出しを使用しています、そして私は次のメッセージを得ています:
<b>Fatal error</b>: Call to a member function get_results() on a non-object in <b>C:\wamp\www\maps_en2\markers.php</b> on line <b>15</b><br />
これは呼び出しです:
$.ajax({
type: "POST",
url: "markers.php",
data: ({'southWestLat' : southWestLat , 'southWestLng' : southWestLng , 'northEastLat' : northEastLat , 'northEastLng' : northEastLng}),
success: function(msg){
alert( msg );
}
});
そしてこれが呼ばれるコードです - marker.php:
<?php
global $wpdb;
$sql = "SELECT user_id, lat, lng FROM coordinates WHERE lat>".$_POST["southWestLat"]." and lat<".$_POST["northEastLat"]." and lng>".$_POST["southWestLng"]." and lng<".$_POST["northEastLng"];
$rows = $wpdb->get_results($sql, OBJECT_K);
...
?>
奇妙なのは、phpコードがjavascriptと同じファイルにあるとき(そしてパラメータ「southWestLat」などの代わりに、私は数字を使ったとき)、それがうまくいったということです。
jqueryはphpファイルの20個のテーマフォルダの下にありますが、marker.phpはルートディレクトリの下にあります(何らかの理由でテーマ内にあった場合は使用できません)。
example.com/markers.php
を直接呼び出すのでこれは機能しません、そしてそのファイルは$wpdb
オブジェクトのようにWordPressから何もロードしません。
wp-load.php
を含めることができますが、WordPressのインストールを他の場所に移動すると、これは壊れるかもしれません。 WordPressでのAjax呼び出しの方法とより一致するようにするには、wp_ajax_[action]
のフックとして記述する必要があります。詳細については WordPress にあるAjaxの紹介を参照してください。