Виклик Ajax завжди повертає 0


18

У мене проблема з поверненням AJAX 0 завжди!

Я все зробив за книгою і не можу зрозуміти, що не так? Будь ласка, допоможіть!!

Ось мій дзвінок Ajax:

//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' )щоб отримати URL-адресу AJAX, а не якусь складену 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-коді будь-які заяви, які виводять, наприклад, echo, die () тощо?
Jayawi Perera

2
Hey Jay, Виходить додавання die (); до мого функціоналу Ajax це виправили!
Бен Рачикот

20

використання wp_die();в кінці функції AJAX вирішило проблему для мене.

напр

add_action( 'wp_ajax_my_ajax_function', 'my_ajax_function' );

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

дякую ... не знаю чому, але використовуючи просто die () не працювало.
Вибачте SEO

10

Для мене фокусом було додати wp_ajax_noprivдії. Я тестував сценарій в одному браузері, коли я входив у адміністратор WP, а потім спробував той самий сценарій у Chrome і зрозумів, що сценарій не працює. Після того, як я поставив 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
Tree Nguyen

Це дуже вірно ... якщо ви ввійшли до адміністратора, тоді функція _nopriv не викликається
Michal Holub

2

Я рекомендую використовувати wp_send_json_success () та wp_send_json_error () на стороні сервера. Вам не потрібно турбуватися про die () тощо, і змінна "status" надсилається автоматично, це набагато чистіше. Наприклад

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

Для мене це був факт, що я використовував returnзамість echoсвоєї функції PHP. Змінивши його, щоб echoвиправити.

function doAjax() {
    $result = getPosts();
    echo json_encode($result, true);
    die();
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.