J'ai configuré l'exemple wordpress ajax de base dans mon thème wp. Le déclencheur est créé par modernizr.js en vérifiant les requêtes de média sur la page.
jQuery(document).ready(function($) {
if(Modernizr.mq('only all and (max-width:6300px)')) {
var data = {
action: 'my_action',
whatever: ajax_object.we_value // We pass php values differently!
};
// We can also pass the url value separately from ajaxurl for front end AJAX implementations
jQuery.post(ajax_object.ajax_url, data, function(data) {
$("#trending-Container").html(data).fadeIn(1000);
});
}
});//end function
J'ai localisé et mis en file d'attente mes scripts.
wp_enqueue_script('mainJS', get_template_directory_uri() . '/js/mainJS.js', array("jquery") );
wp_localize_script( 'mainJS', 'ajax_object',
array( 'ajax_url' => admin_url( 'admin-ajax.php' ), 'we_value' => 1234 ) );
et enfin la fonction qui gère la demande est:
add_action('wp_ajax_my_action', 'my_action_callback');
add_action('wp_ajax_nopriv_my_action', 'my_action_callback');
function my_action_callback() {
global $wpdb;
$whatever = intval( $_POST['whatever'] );
$whatever += 10;
echo $whatever;
die();
}
Cela me donne constamment une réponse de 0 (pas de propriétés) et je ne sais pas pourquoi. P.S Tout est local.
Status code 200
Host:lart.co.uk
Origin:http://lart.co.uk
Referer:http://lart.co.uk/
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/28.0.1500.71 Chrome/28.0.1500.71 Safari/537.36
X-Requested-With:XMLHttpRequest
Form Dataview sourceview URL encoded
action:my_action
whatever:1234
Tout doit correspondre ici:
PHP
add_action ('wp_ajax_mon_action','mon_action'); add_action (' wp_ajax_nopriv_mon_action','mon_action'); une fonction mon_action() {}
JS
var data = { action: 'mon_action', peu importe: ajax_object.we_value };
En outre, il vous manque des contrôles de sécurité et une meilleure gestion de la réponse.
Vérifiez ces exemples: [1] et [2] .
Ajoutez la fin "exit" de la fonction comme indiqué ci-dessous, cela corrigera le retourne 0 avec la réponse dans WordPress lors de l'utilisation de la requête ajax.
add_action('wp_ajax_nopriv_getStateList', 'getStateList');
add_action('wp_ajax_getStateList', 'getStateList');
function getStateList() {
global $wpdb;
$countryId = $_POST['countryId'];
$results = $wpdb->get_results("SELECT id,name FROM regions where country_id ='".$countryId."' ");
echo json_encode(array('status'=>200,'data'=>$results));
exit;
}
Voici l'exemple complet pour résoudre ce problème:
JavaScript:
$(document).ready(function() {
$("#submit").click(function(e) {
var demo = 'demo';
var ajaxurl = '<?php echo admin_url("admin-ajax.php", null); ?>';
data = { action: "data_insert", demo: demo};
$.ajax({
url: ajaxurl,
data: data,
dataType: 'json',
type: 'post',
success: function(response) {
console.log(response);
}
});
});
});
PHP:
add_action('wp_ajax_data_insert', 'data_insert');
add_action('wp_ajax_nopriv_data_insert', 'data_insert');
function data_insert() {
$data = $_POST['demo'];
echo json_encode($data);
die();
}