एडमिन अजाक्स 0 पर लौट रहा है


28

मैं विशेष रूप से jQuery और AJAX के लिए अपेक्षाकृत नया हूं। मेरे पास एक छोटा मुद्दा है जिसका रिटर्न मान हमेशा 0 होता है, हालांकि मुझे लगता है कि यह वास्तव में सफलता का संदेश है और यह कुछ भी नहीं लौटा रहा है।

मैंने Google-कविता को स्कैन किया है और PHP कॉलबैक पर मेरी मृत्यु () फ़ंक्शन है और मेरा मानना ​​है कि add_actions सही हैं।

मैं एक स्थानीय होस्ट पर काम कर रहा हूं, हालांकि मुझे संदेह है कि यह प्रभावित करता है और यह सब एडमिन में है, फ्रंट एंड नहीं। मैंने यह भी जाँच की कि js का अंकन और स्थानीयकरण किया गया है।

मुझे क्रोम डेवलपर क्षेत्र में 200 ओके संदेश मिलता है।

मैंने http://codex.wordpress.org/AJAX_in_Plugins से मूल AJAX का भी परीक्षण किया और यह 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
क्या आपने सत्यापित किया है कि अजाक्सुरल ठीक से सेट है?
एंड्रयू बर्टेल

क्या आपका ब्राउज़र कंसोल कोई त्रुटि दिखाता है? यदि ऐसा है, तो वो क्या हैं?
s_ha_dum

2
jQuery('.cl_link_buttons').val('id').click(function()अजीब लगता है।
FUXIA

एंड्रयू, हाँ मुझे विश्वास है कि यह सही है, क्रोम इंस्पेक्टर में अनुरोध यूआरएल डोमेन / wp-admin / admin-ajax.php दिखा रहा है
Apina

@s_ha_dum कोई त्रुटि नहीं दिखा रहा है
Apina

जवाबों:


40

एक 0प्रतिक्रिया का मतलब है कि कार्रवाई सेट नहीं है (अजाक्स डेटा में) या कार्रवाई का कॉलबैक फ़ंक्शन नहीं मिल सकता है।


2
हाँ, यह सही उत्तर है। अंत में मरने वाले () को जोड़ने वाली सभी लिपि को समाप्त कर दिया गया है। यह उत्तर तकनीकी रूप से सही है यदि आप आउटपुट के अंत में 0 को जोड़कर देख रहे हैं, हालांकि यदि आप सभी को '0' मिलता है, तो इसका मतलब है कि कुछ भी नहीं लौटाया गया था, और आपके पास इस उत्तर में वर्णित त्रुटि है।
हाइब्रिड वेब देव

या आप सिर्फ php में उद्देश्य पर कुछ भी नहीं लौटाते हैं जो ajax अनुरोध को संभालता है। किसी चीज़ को प्रतिध्वनित करना सुनिश्चित करें, अन्यथा, .alwaysउसे पकड़ने के लिए उपयोग करें।
सोलोमन क्लॉसन

20

आपको जो करना है वह die();अपने फंक्शन के अंत में जोड़ना है ।

यहां और अधिक कारण देखें: http://codex.wordpress.org/AJAX_in_Plugins

टिप्पणियाँ:

  • echoनिष्पादित करने से पहले आपको कुछ करना चाहिए die। यह सर्वर त्रुटियों को रोकेगा, और डीबगिंग के समय मदद करेगा।

7
यह WP AJAX 0 समस्या का उत्तर है।
बेन रैसिकॉट

वास्तव में, अगर आप सिर्फ जोड़ने die()कुछ बाहर गूंज के बिना, यह भी आप एक 500 आंतरिक सर्वर त्रुटि देते हैं, और वापस आ जाएगी 0के लिए wp-admin/admin-ajax.php। आपको हमेशा कुछ ग्रहण करना चाहिए, भले ही आप केवल मूल्य निर्धारित कर रहे हों और कुछ भी वापस करने की आवश्यकता नहीं है। अन्यथा, यदि आप कुछ नहीं गूंजते हैं और die(), आपको .always()इसे पकड़ने के लिए उपयोग करना होगा, क्योंकि यह इसमें नहीं होगा .done(), यह .fail()इसलिए होगा क्योंकि यह बिना किसी चीज़ के मर जाता है = 500 त्रुटि।
सोलोमन क्लॉसन

क्या आपके पास कुछ लिंक या वर्किंग कोड हैं, तो हम देख सकते हैं? @ सोलोमनक्लोसन
फ्रांसिस्को

मेरे सभी जवाबों का लाइव वातावरण में परीक्षण किया गया है। यह परीक्षण करने के लिए बहुत सरल है, बस इस से पहले कुछ भी गूँजने के बिना फ़ाइल 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); });
सोलोमन क्लॉसन

आप देखेंगे, असफल दिखाई देगा, प्रतिक्रिया एक 500 आंतरिक सर्वर त्रुटि होगी।
सोलोमन क्लॉसन

2

इसलिए मैंने इस पर काम किया। यह jQuery नहीं था जैसे कि मैंने सुधार किया है, यह कॉल बैक फ़ंक्शन का प्लेसमेंट था। मैंने इसे मुख्य प्लगइन फाइल पर स्थानांतरित कर दिया और यह काम कर गया।


4
क्या आप दिखा सकते हैं कि आपने यह कैसे किया?
फ्रांसिस्को कॉर्लेस मोरेल्स

1
मैं यही मुद्दा रख रहा हूं, क्या आप दिखा सकते हैं कि आपने इसे कैसे तय किया?
जेरेमी

एक और जवाब यहां है: wordpress.stackexchange.com/a/131397 @Jeremy
फ्रांसिस्को

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

मैं आपके जावास्क्रिप्ट कोड के बारे में कई चीजें गलत देख सकता हूं और यही कारण हो सकता है।


अच्छी तरह से यह बहुत सारी चीजों के साथ आ रहा है जिन्हें मैं पूरी तरह से नहीं समझता। मुझे क्या समझ में आया: रेडीस्टेट 4, स्टेटस 200, रिस्पॉन्सटेक्स्ट "0"। और फिर यह प्रतिक्रिया 0 के साथ आता है। यदि विशिष्ट में कुछ है तो मुझे यहां देखना चाहिए? यदि कोड के साथ कोई समस्या है, तो कृपया उन्हें इंगित करें और मैं उन पर गौर कर सकता हूं, मैं अभी भी jQuery सीख रहा हूं।
अपिना

क्या आपकी साइट लाइव चल रही है?
उमर आबिद

नहीं, यह लोकलहोस्ट है
एपिना

बताना मुश्किल है। क्या आप कंसोल.info (ajaxurl) चलाने की कोशिश कर सकते हैं; और देखें कि यह क्या देता है?
उमर आबिद

1
ajaxurl को ' localhost / wp-admin / admin-ajax.php ' के साथ बदलने की कोशिश करें और देखें कि यह क्या देता है
उमर आबिद

1

मुझे यह समस्या भी थी, और यह तथ्य था कि मैं अपने PHP फ़ंक्शन के returnबजाय उपयोग कर रहा था echo। इसे बदलकर इसे echoठीक किया जाए।

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

0

मेरे पास एक ही समस्या थी, इसे ठीक करने के लिए मैंने wp_die()अपने फ़ंक्शन के अंत में उपयोग किया ए के बाद echo। अपनी स्क्रिप्ट पर अपना एक्शन पास करना न भूलें।

सुनिश्चित करने के लिए, जांचें कि क्या आपके फ़ंक्शन का उपयोग करना wp_ajax_noprivहै wp_ajax


0

केवल संदर्भ के लिए, जो भी यहां पहुंचता है, "अजाक्स अनुरोध 0 लौट रहा है": याद रखें जब आप ऑब्जेक्ट की विधि में अजाक्स कार्रवाई जोड़ते हैं, तो सुनिश्चित करें कि विधियों का उपयोग संशोधक है public

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

add_actionअगर यह आपके तरीके को बाहर नहीं बुला सकता है तो बस मौन $object


0

यदि आप ajax url सेट करने के लिए wp_localize_script () फ़ंक्शन का उपयोग नहीं करते हैं, तो व्यवस्थापक 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' ) );

जावास्क्रिप्ट फ़ाइल (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

महत्वपूर्ण: $ तारीख = isset ($ _ POST ['तारीख'])? $ _POST ['तारीख']: ०; और फ़ंक्शन डाई ();
नौचेंग

0

जिन लोगों को त्रुटि 0 :), क्रिया => 'कार्रवाई' में मिलती है

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', array ('jquery'));
    wp_enqueue_script ( 'ly फार्म-ajax स्क्रिप्ट');

    wp_localize_script ('गीत-रूप-अजाक्स-स्क्रिप्ट', 'ly_form_ajax_object', सरणी ()
        'ajaxurl' => admin_url ('व्यवस्थापक-ajax.php'),
        'पुनर्निर्देशन' => home_url (),
        'लोडिंगमेसेज' => __ ('')
    ));
}
// क्रिया है: contact_ajax
add_action ('wp_ajax_contact_ajax', 'my_function');
add_action ('wp_ajax_nopriv_contact_ajax', 'my_function');

फ़ंक्शन my_function () {
    ob_clean ();
    इको "http://sanvatvungcao.com";
    wp_die ();
}

/ **
 * इस तरह पृष्ठ में लघु कोड: [गीत-रूप]
 * @ अपरम टाइप $ एटीएस
 * @ अपरम $ प्रकार की सामग्री
 * @ स्ट्रेट स्ट्रिंग
 * /
फ़ंक्शन ly_form_shortcode ($ atts, $ सामग्री = "") {
    इको html_form_code ();
}
add_shortcode ('गीत-रूप', 'ly_form_shortcode');

// HTML फ़ॉर्म दिखाएगा,
फ़ंक्शन html_form_code () {
    $ html = "";
    $ html। = '';
    $ html। = '';

    $ HTML। = '        

H đệm *

'; $ HTML। = '

धुन *

'; $ HTML। = '

पता *

'; $ HTML। = '

ईमेल *

'; $ HTML। = '

Ni गोबर * dg

'; $ html। = ''; $ html। = ''; $ html। = ''; $ html। = ''; $ html वापस करें; } और यहां js (ly-script.js): (फ़ंक्शन ($) { $ (दस्तावेज़)। पहले से ही (फ़ंक्शन) ({ // AJAX फॉर्म सबमिट करें $ ('form.ly-form-ex')। ('सबमिट', फंक्शन (e) { e.preventDefault (); $ ( '# लोड हो रहा है') एचटीएमएल ( 'लोड हो रहा है ...')। var dataString = {action: 'contact_ajax'}; .ajax $ ({ प्रकार: "POST", url: ly_form_ajax_object.ajaxurl, डेटा: dataString, सफलता: फ़ंक्शन (डेटा) { $ ( '# लोड हो रहा है') एचटीएमएल (डेटा)। }, त्रुटि: फ़ंक्शन (त्रुटि त्रुटि) { चेतावनी (errorThrown); } }); }); }); // अंत तैयार }) (jQuery);

आशा है कि यह आपके लिए उपयोगी है, सर्वश्रेष्ठ


आप क्यों स्पष्ट करना चाहते हो सकता है :)
kaiser

नीचे की रेखा यहाँ ob_clean () हो सकती है; समारोह। आप कर सकते हैं और अनुभव कर सकते हैं
Ly वान वु

-2

ifकथन जोड़ने का प्रयास करें :

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

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


//your coded function


die();
}



}// end function

1
उस समस्या का समाधान कैसे होगा? स्वीकृत उत्तर और मूल कोड पर ध्यान दें।
FUXIA
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.