web-dev-qa-db-ja.com

Ajaxクエリでget_results()を使用できない

私は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はルートディレクトリの下にあります(何らかの理由でテーマ内にあった場合は使用できません)。

2
Ash

example.com/markers.phpを直接呼び出すのでこれは機能しません、そしてそのファイルは$wpdbオブジェクトのようにWordPressから何もロードしません。

wp-load.phpを含めることができますが、WordPressのインストールを他の場所に移動すると、これは壊れるかもしれません。 WordPressでのAjax呼び出しの方法とより一致するようにするには、wp_ajax_[action]のフックとして記述する必要があります。詳細については WordPress にあるAjaxの紹介を参照してください。

4
Jan Fabry