web-dev-qa-db-fra.com

Pourquoi ma demande ajax reçoit-elle la réponse 0?

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
12
UzumakiDev

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] .

28
brasofilo

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;
}
4
abrar

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();
}
1
Noman