web-dev-qa-db-fra.com

Impossible d'utiliser get_results () dans une requête ajax

J'utilise un appel ajax jquery pour obtenir certaines données de wpdb et le message suivant s'affiche:

<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 />

C'est l'appel:

$.ajax({
    type: "POST",
    url: "markers.php",
    data: ({'southWestLat' : southWestLat , 'southWestLng' : southWestLng , 'northEastLat' : northEastLat , 'northEastLng' : northEastLng}),
    success: function(msg){
    alert( msg );
    }
});

Et voici le code appelé markers.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);
    ...
?>

Ce qui est étrange, c'est que lorsque le code php était sur le même fichier que le javascript (et au lieu des paramètres "southWestLat", etc., j'ai utilisé des chiffres, puis cela a fonctionné.
Je dois préciser que la requête est dans un fichier php sous le dossier des thèmes de vingt, mais markers.php se trouve dans le répertoire racine (ne pouvait pas l'utiliser lorsqu'il était dans le thème pour une raison quelconque).

2
Ash

Cela ne fonctionnera pas car vous appelez directement example.com/markers.php et ce fichier ne charge rien à partir de WordPress, tel que l'objet $wpdb.

Vous pouvez inclure wp-load.php, mais cela pourrait échouer si vous déplacez l'installation de WordPress ailleurs. Pour être plus en phase avec la manière dont les appels Ajax dans WordPress doivent être effectués, vous devez l'écrire comme un crochet pour wp_ajax_[action]. Voir mon introduction à Ajax dans WordPress pour plus de détails.

4
Jan Fabry