Admin Ajax mengembalikan 0


28

Saya relatif baru untuk jQuery dan AJAX pada khususnya. Saya punya masalah kecil dengan nilai pengembalian selalu menjadi 0, meskipun saya pikir ini sebenarnya pesan sukses dan tidak mengembalikan apa pun.

Saya telah menjelajahi Google-ayat dan saya memiliki fungsi die () pada panggilan balik PHP dan saya percaya add_actions sudah benar.

Saya bekerja pada host lokal, meskipun saya ragu itu mempengaruhi dan ini semua ada di admin, bukan front end. Saya juga memeriksa bahwa js enqueued dan dilokalkan.

Saya mendapatkan 200 pesan OK di area pengembang chrome.

Saya juga menguji AJAX dasar dari http://codex.wordpress.org/AJAX_in_Plugins dan juga mengembalikan 0, yang membuat saya bertanya-tanya apakah itu sesuatu selain kode yang diuraikan di bawah ini.

Saat ini saya hanya mencoba membuatnya mengirim sesuatu kembali ke jQuery. Bantuan apa pun akan dihargai.

JQuery

jQuery(document).ready(function(){
    jQuery('.cl_link_buttons').val('id').click(function() {

            var currentid = jQuery(this).attr('id');

            //alert(currentid);
            console.log(currentid);

            jQuery.ajax ( data = {
                action: 'cleanlinks_ajax_get_post_data',
                url: ajaxurl,
                type: 'POST',
                dataType: 'text',
                "currentid" : currentid

            });

            jQuery.post(ajaxurl, data, function(response) {

                var dataz = response;
                alert( dataz );
                console.log (dataz); //show json in console


            });

            return false;

    }); //end click event
}); //end doc ready

PHP

add_action("wp_ajax_cleanlinks_ajax_get_post_data", "cleanlinks_ajax_get_post_data");
add_action("wp_ajax_nopriv_cleanlinks_ajax_get_post_data", "cleanlinks_ajax_get_post_data");

function cleanlinks_ajax_get_post_data() {

$from_ajax =  $_POST['currentid'];

echo "do" . $from_ajax . "something";

die();


}

1
Sudahkah Anda memverifikasi bahwa ajaxurl diatur dengan benar?
Andrew Bartel

Apakah konsol browser Anda menunjukkan kesalahan? Jika demikian, apakah mereka?
s_ha_dum

2
jQuery('.cl_link_buttons').val('id').click(function()terlihat aneh.
fuxia

Andrew, ya saya yakin itu benar, url permintaan di Chrome Inspector menunjukkan domain / wp-admin / admin-ajax.php
Apina

@s_ha_dum Tidak ada kesalahan yang menunjukkan
Apina

Jawaban:


40

Sebuah 0respon berarti baik bahwa tindakan tidak diatur (dalam data ajax) atau bahwa fungsi callback tindakan ini tidak dapat ditemukan.


2
Ya, ini jawaban yang benar. Semua menambahkan die () ke akhir tidak, adalah mengakhiri skrip. Jawaban itu secara teknis benar jika Anda melihat 0 ditambahkan ke AKHIR output, namun jika yang Anda dapatkan adalah '0', maka itu berarti tidak ada yang dikembalikan, dan Anda memiliki kesalahan seperti yang dijelaskan dalam jawaban ini.
Web Hibrid

Atau Anda tidak mengembalikan apa pun dengan sengaja di php yang menangani permintaan ajax. Pastikan untuk menggemakan sesuatu, jika tidak, gunakan .alwaysuntuk menangkapnya.
Solomon Closson

20

Yang harus Anda lakukan adalah menambahkan die();di akhir fungsi Anda.

Lihat alasannya dan lainnya di sini: http://codex.wordpress.org/AJAX_in_Plugins

Catatan:

  • Anda harus melakukan echosesuatu sebelum mengeksekusi die. Ini akan mencegah kesalahan server, dan akan membantu saat debugging.

7
Ini adalah jawaban untuk masalah WP AJAX 0.
Ben Racicot

Sebenarnya, jika Anda hanya menambahkan die()tanpa bergema sesuatu, ini juga akan memberikan internal Server Error 500, dan kembali 0untuk wp-admin/admin-ajax.php. Anda harus selalu menyuarakan sesuatu, bahkan jika Anda hanya menetapkan nilai dan tidak ada yang perlu dikembalikan. Kalau tidak, jika Anda tidak menggemakan apa-apa dan die(), Anda harus menggunakannya .always()untuk menangkapnya, karena tidak akan ada di .done()dalamnya, itu akan ada di dalam .fail()karena ia mati tanpa apa-apa = 500 Kesalahan.
Solomon Closson

apakah Anda memiliki beberapa tautan, atau kode kerja, sehingga kami dapat melihatnya? @SolomonClosson
Francisco Corrales Morales

Semua jawaban saya telah diuji di lingkungan langsung. Sangat mudah untuk menguji ini, cukup lakukan die();fungsi ajax dalam functions.phpfile tanpa menggemakan apa pun sebelum ini, dan panggil aksi melalui ajax, misalnya:var testing = $.ajax( ... ); testing.fail(function(response) { console.log('Failed ' + response); }); testing.done(function(response) { console.log('Success ' + response); }); testing.always(function(response) { console.log('Ajax Request complete: ' + response); });
Solomon Closson

Anda akan melihat, Gagal akan muncul, responsnya akan menjadi 500 Server Internal Kesalahan.
Solomon Closson

2

Jadi saya mengatasinya. Itu bukan jQuery karena meskipun saya telah meningkatkan itu, itu adalah penempatan fungsi panggilan balik. Saya memindahkannya ke file plugin utama dan berhasil.


4
dapatkah Anda menunjukkan bagaimana Anda melakukannya?
Francisco Corrales Morales

1
Saya mengalami masalah yang sama, dapatkah Anda menunjukkan bagaimana Anda memperbaikinya?
Jeremy


2

Saya punya masalah yang sama. Dan memecahkannya. Anda harus mengirim variabel "aksi" seperti misalnya:

var dataString = {lat: '55.56', lng: '25.35', action:'report_callback'};
 $.ajax({                            
        url: "http://domain.net/wp-admin/admin-ajax.php",  
        type: "POST",
        //some times you cant try this method for sending action variable
        //action : 'report_callback',
        data:dataString,        
        success: function(data){ 
            console.log(data);

            },
        error: function() {
            console.log("Error");            
        }
    });

Karena di wp-admin / admin-ajax.php adalah penangan untuk variabel tindakan:

if ( empty( $_REQUEST['action'] ) ) {...}
Line 26

4
OP memang mengirim actionparameter. Meskipun ini mungkin berhasil bagi Anda, itu bukan masalah di sini.
s_ha_dum

1

Coba jalankan kode ini di konsol

jQuery.post(ajaxurl, {action:'cleanlinks_ajax_get_post_data'}, function(response) {
     console.log (response);
});

Saya dapat melihat banyak hal yang salah tentang kode JavaScript Anda dan itu mungkin menjadi alasannya.


Yah itu datang dengan banyak hal yang saya tidak sepenuhnya mengerti. Apa yang saya mengerti: ReadyState 4, status 200, responseText "0". Dan kemudian muncul dengan respons 0. Jika ada sesuatu yang spesifik yang harus saya cari di sini? Jika ada masalah dengan kode, harap tunjukkan dan saya bisa melihatnya, saya masih belajar jQuery.
Apina

apakah situs Anda berjalan langsung?
Omar Abid

Tidak, ini localhost
Apina

Sulit dikatakan. Bisakah Anda mencoba menjalankan console.info (ajaxurl); dan lihat apa isinya?
Omar Abid

1
coba ganti ajaxurl dengan ' localhost / wp-admin / admin-ajax.php ' dan lihat apa hasilnya
Omar Abid

1

Saya memiliki masalah ini juga, dan itu adalah fakta yang saya gunakan returnalih-alih echodalam fungsi PHP saya. Mengubahnya untuk echomemperbaikinya.

function doAjax() {
    $result = getPosts();
    echo json_encode($result, true);
    die();
}

0

Saya memiliki masalah yang sama, untuk memperbaikinya saya gunakan wp_die()di akhir fungsi saya hanya setelah echo. Jangan lupa menyampaikan tindakan Anda pada skrip Anda.

Yang pasti, periksa apakah fungsi Anda harus menggunakan wp_ajax_noprivlike wp_ajax.


0

Hanya untuk referensi, bagi siapa saja yang pergi ke sini, googling "permintaan ajax kembali 0": Ingat ketika Anda menambahkan tindakan ajax ke metode objek untuk memastikan metode pengubah akses public.

add_action( 'wp_ajax_my_action', [$object, 'my_method']);

add_actiondiam saja jika tidak bisa memanggil metode Anda di luar $object.


0

Jika Anda tidak menggunakan fungsi wp_localize_script () untuk mengatur url ajax, admin ajax mengembalikan 0. Saya pikir itu adalah bug Wordpress. Berikut ini sebuah contoh:

    wp_enqueue_script( 'search_js', get_template_directory_uri() . '/js/search.js', array( 'jquery' ), null, true );    
    wp_localize_script( 'search_js', 'ajaxurl', admin_url( 'admin-ajax.php' ) );

File javascript (search.js):

    $('#search_input').autocomplete({
    source: function(request, response) {

        $.ajax({
            type: 'POST',
            dataType: 'json',
            url: ajaxurl,
            data: 'action=my_custom_action_search&search_criteria=' + request.term,
            success: function(data) {
                response(data);
            },
            error: function(errorThrown){
                console.log(errorThrown);
            } 
        });
    },
    minLength: 3
});

0
jQuery(document).ready(function(){
    jQuery('.cl_link_buttons').val('id').click(function() {
       $.ajax({
            type:'POST',
            url: ajaxurl,
            data: {
                action : 'ajax_filter',
                currentid : 'currentid'
            },
            success: function (result) {
                console.log(result);
                $result = $(result);
                        $result.fadeIn('7000');
                        $("#showresults").html(result);

            },
            error: function (xhr, status) {
                alert("Sorry, there was a problem!");
            },
            complete: function (xhr, status) {
                $('#showresults').slideDown('slow')
            }
            });
     });
}); 

// fungsi kode php

<?php
    add_action( 'wp_ajax_nopriv_ajax_filter', 'ajax_filter' );
    add_action( 'wp_ajax_ajax_filter', 'ajax_filter' );
    function ajax_filter(){
        $date = isset($_POST['date']) ? $_POST['date'] : 0;
        echo $date;
        die();
    }
?>

Hanya memposting kode tidak baik, bisakah Anda menjelaskan apa yang dilakukan oleh kode ini?
bravokeyl

penting: $ date = isset ($ _ POST ['date'])? $ _POST ['date']: 0; Dan fungsi mati ();
Ngocheng

0

Mereka yang mendapatkan kesalahan 0 :), action => 'action'

var data = { 'action': 'firmabilgilerikaydet', 'data': form_data };

$.post(ajaxurl, data, function(response) { alert(response); });

-1
ANDA MENCOBA:

add_action ('init', 'ly_form_ajax_init');


function ly_form_ajax_init () {
    wp_register_script ('ly-form-ajax-script', plugins_url (). '/ ly-form / js / ly-script.js', array ('jquery'));
    wp_enqueue_script ('ly-form-ajax-script');

    wp_localize_script ('ly-form-ajax-script', 'ly_form_ajax_object', array (
        'ajaxurl' => admin_url ('admin-ajax.php'),
        'redirecturl' => home_url (),
        'loadingmessage' => __ ('')
    ));
}
// Aksi adalah: contact_ajax
add_action ('wp_ajax_contact_ajax', 'my_function');
add_action ('wp_ajax_nopriv_contact_ajax', 'my_function');

function my_function () {
    ob_clean ();
    echo "http://sanvatvungcao.com";
    wp_die ();
}

/ **
 * Kode pendek di halaman seperti ini: [ly-form]
 * @param ketik $ atts
 * @param ketik $ content
 * @ mengembalikan string
 * /
function ly_form_shortcode ($ atts, $ content = "") {
    echo html_form_code ();
}
add_shortcode ('ly-form', 'ly_form_shortcode');

// Formulir HTML akan ditampilkan,
function html_form_code () {
    $ html = "";
    $ html. = '';
    $ html. = '';

    $ html. = '        

H * đệm *

'; $ html. = '

Tu *

'; $ html. = '

Ỉa chỉ *

'; $ html. = '

Email *

'; $ html. = '

Nội dung * dg

'; $ html. = ''; $ html. = ''; $ html. = ''; $ html. = ''; kembalikan $ html; } DAN DI SINI js (ly-script.js): (fungsi ($) { $ (dokumen) .ready (function () { // Lakukan pengiriman formulir AJAX $ ('form.ly-form-ex'). on ('submit', function (e) { e.preventDefault (); $ ('# loading'). html ('loading ...'); var dataString = {action: 'contact_ajax'}; $ .ajax ({ ketik: "POST", url: ly_form_ajax_object.ajaxurl, data: dataString, sukses: fungsi (data) { $ ('# loading'). html (data); }, error: function (errorThrown) { lansiran (errorThrown); } }); }); }); // berakhir siap }) (jQuery);

Semoga bermanfaat bagi Anda, Terbaik


Anda mungkin ingin menjelaskan alasannya :)
kaiser

Intinya di sini mungkin ob_clean (); fungsi. Anda dapat melakukan dan mengalami
Ly Van Vu

-2

Coba tambahkan ifpernyataan:

function my_function(){
$id = $_POST['variation_id'];

    if(isset($_POST['variation_id'])) { 


//your coded function


die();
}



}// end function

1
Bagaimana itu memecahkan masalah? Perhatikan jawaban yang diterima dan kode aslinya.
fuxia
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.