ผู้ดูแลระบบ Ajax กำลังส่งคืน 0


28

ฉันค่อนข้างใหม่สำหรับ jQuery และ AJAX โดยเฉพาะ ฉันมีปัญหาเล็ก ๆ ที่มีค่าส่งคืนเป็น 0 เสมอแม้ว่าฉันคิดว่านี่เป็นข้อความความสำเร็จที่แท้จริงและมันไม่ได้ส่งคืนอะไรเลย

ฉันขัดจังหวะ Google ข้อและฉันมีฟังก์ชั่นตาย () ในการเรียกกลับ PHP และฉันเชื่อว่า add_actions นั้นถูกต้อง

ฉันทำงานกับโฮสต์ในพื้นที่ แต่ฉันสงสัยว่ามีผลกระทบกับมันและนี่คือทั้งหมดในผู้ดูแลระบบไม่ใช่ส่วนหน้า ฉันยังตรวจสอบว่า js จัดทำและแปลเป็นภาษาท้องถิ่นแล้ว

ฉันได้รับข้อความ 200 OK ในพื้นที่นักพัฒนา chrome

ฉันยังทดสอบ AJAX ขั้นพื้นฐานจากhttp://codex.wordpress.org/AJAX_in_Pluginsและมันกลับมาเป็น 0 ซึ่งทำให้ฉันสงสัยว่าเป็นสิ่งอื่นที่ไม่ใช่รหัสที่ระบุไว้ด้านล่าง

ตอนนี้ฉันแค่พยายามทำให้มันส่งบางสิ่งกลับไปยัง jQuery ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชม

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
คุณตรวจสอบแล้วว่า ajaxurl ถูกตั้งค่าอย่างเหมาะสม
Andrew Bartel

คอนโซลของเบราว์เซอร์ของคุณแสดงข้อผิดพลาดหรือไม่? ถ้าเป็นเช่นนั้นพวกเขาคืออะไร?
s_ha_dum

2
jQuery('.cl_link_buttons').val('id').click(function()ดูแปลก ๆ
fuxia

แอนดรูว์ใช่ฉันเชื่อว่าถูกต้อง URL คำขอใน Chrome Inspector แสดงโดเมน / wp-admin / admin-ajax.php
Apina

@s_ha_dum ไม่มีข้อผิดพลาดในการแสดง
Apina

คำตอบ:


40

การ0ตอบสนองหมายความว่าไม่ได้ตั้งค่าการกระทำ (ในข้อมูล ajax) หรือไม่พบฟังก์ชันการเรียกกลับของการกระทำ


2
ใช่นี่คือคำตอบที่ถูกต้อง การเพิ่มตายทั้งหมด () ต่อท้ายจะถูกยกเลิกสคริปต์ คำตอบนั้นถูกต้องทางเทคนิคถ้าคุณเห็น 0 ต่อท้ายผลลัพธ์ แต่ถ้าคุณได้รับคือ '0' หมายความว่าไม่มีอะไรถูกส่งคืนและคุณมีข้อผิดพลาดตามที่อธิบายไว้ในคำตอบนี้
Hybrid Web Dev

หรือคุณเพิ่งส่งคืนอะไรในวัตถุประสงค์ใน php ที่จัดการคำขอ ajax ให้แน่ใจว่าได้สะท้อนบางสิ่งบางอย่างออกมิฉะนั้นใช้.alwaysในการจับภาพ
โซโลมอน Closson

20

สิ่งที่คุณต้องทำคือการเพิ่มdie();ในตอนท้ายของฟังก์ชั่นของคุณ

ดูสาเหตุและเพิ่มเติมได้ที่นี่: http://codex.wordpress.org/AJAX_in_Plugins

หมายเหตุ:

  • คุณควรจะมีอะไรบางอย่างก่อนที่จะดำเนินecho dieวิธีนี้จะช่วยป้องกันข้อผิดพลาดของเซิร์ฟเวอร์และจะช่วยเมื่อทำการดีบัก

7
นี่คือคำตอบสำหรับปัญหา WP AJAX 0
Ben Racicot

อันที่จริงถ้าคุณเพียงแค่เพิ่มdie()โดยไม่ต้องสะท้อนอะไรบางอย่างออกมานี้จะทำให้คุณมีข้อผิดพลาด 500 ภายในเซิร์ฟเวอร์และผลตอบแทนสำหรับ0 wp-admin/admin-ajax.phpคุณควรสะท้อนบางสิ่งออกมาแม้ว่าคุณจะเพิ่งตั้งค่าและไม่จำเป็นต้องส่งคืนก็ตาม มิฉะนั้นหากคุณไม่ได้เสียงก้องและdie()คุณต้องใช้.always()ในการจับมันเพราะมันจะไม่อยู่ใน.done()นั้นมันจะอยู่ใน.fail()เพราะมันจะตายโดยไม่มีอะไร = 500 ข้อผิดพลาด
โซโลมอน Closson

คุณมีลิงค์หรือรหัสที่ใช้งานได้ไหม @SolomonClosson
Francisco Corrales Morales

คำตอบทั้งหมดของฉันได้รับการทดสอบในสภาพแวดล้อมสด มันง่ายมากที่จะทดสอบสิ่งนี้เพียงแค่ทำdie();ฟังก์ชั่น ajax ในfunctions.phpไฟล์โดยไม่ต้องสะท้อนอะไรออกมาก่อนหน้านี้และเรียกการกระทำผ่าน ajax เช่น: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); });
โซโลมอน Closson

คุณจะสังเกตเห็นว่าล้มเหลวจะปรากฏขึ้นการตอบสนองจะเป็น 500 ข้อผิดพลาดเซิร์ฟเวอร์ภายใน
โซโลมอน Closson

2

ดังนั้นฉันจึงทำมันออกมา มันไม่ใช่ jQuery เช่นนี้แม้ว่าฉันได้ปรับปรุงแล้วมันเป็นตำแหน่งของฟังก์ชั่นโทรกลับ ฉันย้ายมันไปยังไฟล์ปลั๊กอินหลักและใช้งานได้


4
คุณสามารถแสดงให้เห็นว่าคุณทำได้อย่างไร
Francisco Corrales Morales

1
ฉันมีปัญหาเดียวกันนี้คุณสามารถแสดงให้เห็นว่าคุณแก้ไขได้อย่างไร
Jeremy

อีกคำตอบอยู่ที่นี่: wordpress.stackexchange.com/a/131397 @Jeremy
Francisco Corrales Morales

2

ฉันมีปัญหาเดียวกัน และแก้ไขมัน คุณต้องส่งตัวแปร "การกระทำ" ตามตัวอย่าง:

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");            
        }
    });

เพราะใน wp-admin / admin-ajax.php เป็นตัวจัดการสำหรับตัวแปรการกระทำ:

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

4
สหกรณ์ไม่ส่งactionพารามิเตอร์ แม้ว่าสิ่งนี้อาจได้ผลสำหรับคุณ แต่ก็ไม่ใช่ปัญหาที่นี่
s_ha_dum

1

ลองเรียกใช้รหัสนี้บนคอนโซล

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

ฉันเห็นสิ่งผิดปกติมากมายเกี่ยวกับรหัส JavaScript ของคุณและอาจเป็นสาเหตุ


มันมาพร้อมกับหลายสิ่งหลายอย่างที่ฉันไม่เข้าใจ สิ่งที่ฉันเข้าใจ: ReadyState 4, สถานะ 200, responseText "0" แล้วมันก็เกิดขึ้นพร้อมกับการตอบสนอง 0 หากมีบางสิ่งที่เฉพาะเจาะจงฉันควรจะมองหาที่นี่? หากมีปัญหาเกี่ยวกับรหัสโปรดชี้ให้พวกเขาและฉันสามารถดูพวกเขาฉันยังคงเรียนรู้ jQuery
Apina

คุณมีเว็บไซต์ของคุณทำงานอยู่หรือไม่
โอมาร์อิดอิด

ไม่มันเป็น localhost
Apina

ยากที่จะบอก คุณลองใช้ console.info (ajaxurl); และดูว่ามันให้อะไร
โอมาร์อิดอิด

1
ลองแทนที่ ajaxurl ด้วย ' localhost / wp-admin / admin-ajax.php ' และดูว่ามันให้อะไร
Omar Abid

1

ฉันมีปัญหานี้เช่นกันและเป็นความจริงที่ฉันใช้returnแทนechoฟังก์ชัน PHP ของฉัน เปลี่ยนเป็นechoแก้ไข

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

0

ฉันมีปัญหาเดียวกันเพื่อแก้ไขฉันใช้ wp_die()echoในตอนท้ายของฟังก์ชั่นของฉันเพียงแค่หลัง อย่าลืมผ่านการกระทำของคุณในสคริปต์ของคุณ

เพื่อให้แน่ใจว่าตรวจสอบว่าฟังก์ชั่นของคุณมีการใช้งานเช่นwp_ajax_noprivwp_ajax


0

เพียงสำหรับการอ้างอิงสำหรับทุกคนที่ได้รับที่นี่ googling "คำขออาแจ็กซ์จะกลับ 0": publicจำได้ว่าเมื่อคุณเพิ่มการกระทำอาแจ็กซ์กับวิธีการของวัตถุเพื่อให้แน่ใจว่าวิธีการเข้าถึงปรับปรุงคือ

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

add_action$objectเพียงเงียบถ้ามันไม่สามารถเรียกนอกวิธีการของคุณ


0

หากคุณไม่ใช้ฟังก์ชัน wp_localize_script () เพื่อตั้งค่า ajax url ผู้ดูแลระบบ ajax จะคืนค่า 0 ฉันคิดว่าเป็นข้อผิดพลาดของ Wordpress นี่คือตัวอย่าง:

    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' ) );

ไฟล์ 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')
            }
            });
     });
}); 

// ฟังก์ชันโค้ด 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();
    }
?>

การโพสต์โค้ดไม่ดีคุณช่วยอธิบายว่าโค้ดนี้ทำอะไรได้บ้าง
bravokeyl

สำคัญ: $ date = isset ($ _ POST ['date'])? $ _POST ['date']: 0; และฟังก์ชั่น die ();
Ngocheng

0

ผู้ที่ได้รับข้อผิดพลาด 0 :), action => 'action'

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

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

-1
คุณลอง:

add_action ('init', 'ly_form_ajax_init');


ฟังก์ชัน ly_form_ajax_init () {
    wp_register_script ('ly-form-ajax-script', plugins_url (). '/ ly-form / js / ly-script.js', อาร์เรย์ ('jquery'));
    wp_enqueue_script (Ly ฟอร์ม Ajax สคริปต์ ');

    wp_localize_script ('ly-form-ajax-script', 'ly_form_ajax_object', อาร์เรย์ (
        'ajaxurl' => admin_url ('admin-ajax.php'),
        'redirecturl' => home_url ()
        'loadingmessage' => __ ('')
    ));
}
// การกระทำคือ: contact_ajax
add_action ('wp_ajax_contact_ajax', 'my_function');
add_action ('wp_ajax_nopriv_contact_ajax', 'my_function');

ฟังก์ชัน my_function () {
    ob_clean ();
    echo "http://sanvatvungcao.com";
    wp_die ();
}

/ **
 * รหัสย่อในหน้านี้: [รูปแบบเหมือนกัน]
 * @param พิมพ์ $ atts
 * @param พิมพ์ $ content
 * @return string
 * /
ฟังก์ชัน ly_form_shortcode ($ atts, $ content = "") {
    echo html_form_code ();
}
add_shortcode ('ly-form', 'ly_form_shortcode');

// แบบฟอร์ม HTML จะแสดง
ฟังก์ชั่น html_form_code () {
    $ html = "";
    $ html. = '';
    $ html. = '';

    $ html. = '        

Họđệm *

'; $ html. = '

T *n *

'; $ html. = '

ỉachỉ *

'; $ html. = '

อีเมล *

'; $ html. = '

ใหม่ * dg

'; $ html. = ''; $ html. = ''; $ html. = ''; $ html. = ''; ส่งคืน $ html } และที่นี่ js (ly-script.js): (ฟังก์ชั่น ($) { $ (เอกสาร) .ready (function () { // ทำการส่งแบบฟอร์ม AJAX $ ('form.ly-form-ex'). on ('ส่ง', ฟังก์ชัน (e) { e.preventDefault (); $ ( '# loading') HTML ( 'loading ...'). var dataString = {action: 'contact_ajax'}; $ .ajax ({ ประเภท: "POST", url: ly_form_ajax_object.ajaxurl, data: dataString ความสำเร็จ: ฟังก์ชั่น (ข้อมูล) { $ ( '# loading') HTML (ข้อมูล). } ข้อผิดพลาด: ฟังก์ชั่น (errorThrown) { การแจ้งเตือน (errorThrown); } }); }); }); // สิ้นสุดพร้อม }) (jQuery);

หวังว่ามันจะเป็นประโยชน์สำหรับคุณที่ดีที่สุด


คุณอาจต้องการอธิบายว่าทำไม :)
kaiser

บรรทัดล่างนี่อาจเป็น ob_clean (); ฟังก์ชัน คุณสามารถทำได้และสัมผัส
Ly Van Vu

-2

ลองเพิ่มifคำสั่ง:

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

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


//your coded function


die();
}



}// end function

1
นั่นจะแก้ปัญหาอย่างไร บันทึกคำตอบที่ยอมรับและรหัสต้นฉบับ
fuxia
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.