अजाक्स कॉल हमेशा 0 देता है


18

मुझे AJAX 0 हमेशा वापस करने की समस्या है!

मैंने किताब से सब कुछ किया है और यह पता नहीं लगा सकता कि क्या गलत है? कृपया सहायता कीजिए!!

यहाँ मेरा अजाक्स कॉल है:

//Pass data through AJAX
var amountToConvert = price;

jQuery.ajax({
      type:"POST",
      url: "../../wp-admin/admin-ajax.php", // our PHP handler file
      action: "ajaxConversion",
      data: {
          amount: amountToConvert
      },
      success:function(data){
      alert(data);
      },
      error: function(errorThrown){
          alert(errorThrown);
      } 

  });
return false;

और function.php में फ़ंक्शन है:

function ajaxConversion(){

$amount = mysql_real_escape_string($_POST['amount']);

echo $amount;

die();
};

add_action('wp_ajax_nopriv_ajaxConversion', 'ajaxConversion');
add_action('wp_ajax_ajaxConversion', 'ajaxConversion');

क्या आपने अपना कोड डीबग करने का प्रयास किया है ? admin_url( 'admin-ajax.php' )AJAX URL प्राप्त करने के लिए भी उपयोग करें, कुछ बना-बनाया URL नहीं।
FUXIA

जवाबों:


15

क्या आप अपने डेटा और जाँच में कार्रवाई (ajaxConversion) कर सकते हैं?

jQuery.ajax({
  type:"POST",
  url: ajaxurl,
  data: {
      action: "ajaxConversion",
      amount: amountToConvert
  },
  success:function(data){
  alert(data);
  },
  error: function(errorThrown){
      alert(errorThrown);
  } 

});

यह अभी भी किसी भी तरह मेरी सामग्री को 0 से जोड़ रहा है।
बेन राहिकॉट

1
@BenRacicot: यदि आप अपने PHP कोड में इको, डाई () इत्यादि जैसे आउटपुट देते हैं, तो क्या आप जाँच सकते हैं?
जयवी परेरा

2
हे जय, टर्न आउट ऑफ डाई मरो (); मेरे अजाक्स के लिए यह तय दुर्गंध!
बेन राहिकोट

20

wp_die();AJAX फ़ंक्शन के अंत में उपयोग करने से मेरे लिए समस्या ठीक हो गई।

जैसे

add_action( 'wp_ajax_my_ajax_function', 'my_ajax_function' );

function my_ajax_function(){      
    echo json_encode($myvar);
    wp_die(); 
}

धन्यवाद ... पता नहीं क्यों, लेकिन सिर्फ मर () का उपयोग नहीं किया।
सगिव एसईओ

10

मेरे लिए wp_ajax_noprivएक्शन जोड़ने की ट्रिक थी । जब मैंने WP व्यवस्थापक में लॉग इन किया था, तब मैंने एक ब्राउज़र पर स्क्रिप्ट का परीक्षण किया, और फिर मैंने क्रोम में एक ही स्क्रिप्ट की कोशिश की और महसूस किया कि स्क्रिप्ट काम नहीं करती है। मैंने डालने के बाद wp_ajax_nopriv, सब कुछ काम करना शुरू कर दिया। :)

add_action( 'wp_ajax_nopriv_erase_uploaded_images', 'erase_uploaded_images' );
add_action( 'wp_ajax_erase_uploaded_images', 'erase_uploaded_images' );

function erase_uploaded_images() {
    $attach_id = filter_input( INPUT_POST, 'attach_id' );
    wp_delete_attachment( $attach_id );
    if ( isset( $_SESSION['uploaded_images'] ) ) {
        $array_attachments = $_SESSION['uploaded_images'];
        if ( ( $key = array_search( $attach_id, $array_attachments ) ) !== false ) {
            unset( $array_attachments[$key] );
        }
        $_SESSION['uploaded_images'] = $array_attachments;
    }
    wp_die();
}

यह, मेरे दोस्त, मुझे निराशा के 2 घंटे बचाए हुए हैं। एक और सबक जानने के लिए जब अपने आवेदन को किसी अन्य वातावरण T_T पर तैनात करें
ट्री गुयेन

यह बिल्कुल सच है ... यदि आप व्यवस्थापक तो _nopriv समारोह नहीं बुलाया जाता है में प्रवेश करने के
मीकल होलुब

2

मैं सर्वर साइड पर wp_send_json_success () और wp_send_json_error () का उपयोग करने की सलाह दूंगा । आपको मरने () आदि के बारे में चिंता करने की आवश्यकता नहीं है और "स्थिति" चर स्वचालित रूप से भेजा जाता है, यह इस तरह से बहुत साफ है। उदाहरण के लिए

function ajaxConversion(){
    // ...
    wp_send_json_success(array(
      'amount' => $amount
    ));
}

परिणाम कुछ इस तरह होगा:

{
 "success":true,
 "data":{"amount":125}
}

तो आप आसानी से अपने ajax कॉल में मान निकाल सकते हैं:

jQuery.ajax({
    type       : 'post',
    data       : {
                  action: 'ajaxConversion', 
                  //nonce : ajax.nonce                              
                 },
    dataType   : 'json',
    url        : ajax.ajaxurl,
    success    : function(data){
         if(data.success) {
            alert(data.amount);                         
         } else {
            alert(data.data.message);
         }

    }
}); 

एक और आम बात है कि मैं भाग गया हूँ एक्शन नाम में टाइपोस है। लॉग इन होने पर उन्हें wp_ajax_nopriv_ {action} या wp_ajax_ {action} होना चाहिए । उदाहरण के लिए, wp-ajax_nopriv, वह है जो मैंने अतीत में कई बार किया है।


0

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

function doAjax() {
    $result = getPosts();
    echo json_encode($result, true);
    die();
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.