Apelul Ajax returnează mereu 0

30 aug. 2013, 13:23:04
Vizualizări: 77.7K
Voturi: 27

Am o problemă cu AJAX care returnează mereu 0!

Am făcut totul conform documentației și nu-mi dau seama ce este greșit? Vă rog să mă ajutați!!

Iată apelul meu Ajax:

//Transmitem datele prin AJAX
var amountToConvert = price;

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

  });
return false;

Iar funcția din functions.php este:

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

Ai încercat să depanezi codul tău? Folosește admin_url( 'admin-ajax.php' ) pentru a obține URL-ul AJAX, nu un URL inventat.

fuxia fuxia
30 aug. 2013 13:26:36
Toate răspunsurile la întrebare 7
1
30

Folosirea funcției wp_die(); la sfârșitul funcției AJAX a rezolvat problema pentru mine.

De exemplu:

add_action( 'wp_ajax_my_ajax_function', 'my_ajax_function' );

function my_ajax_function(){      
    echo json_encode($myvar);
    wp_die(); 
}
8 iul. 2015 10:14:31
Comentarii

mersi... nu știu de ce, dar folosind doar die() nu a funcționat.

Sagive Sagive
12 iul. 2015 11:38:32
3
16

Poți să plasezi acțiunea (ajaxConversion) în Datele tale și să verifici?

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

});
30 aug. 2013 13:29:45
Comentarii

Acest lucru încă adaugă un 0 la conținutul meu într-un fel.

Ben Racicot Ben Racicot
26 mar. 2014 17:55:08

@BenRacicot : Poți verifica dacă ai vreo declarație care face output precum echo, die(), etc în codul tău PHP?

Jayawi Perera Jayawi Perera
27 mar. 2014 05:26:48

Hei Jay, Se pare că adăugarea die(); în funcția mea ajax a rezolvat problema!

Ben Racicot Ben Racicot
27 mar. 2014 15:46:11
2
12

Pentru mine, soluția a fost să adaug acțiunea wp_ajax_nopriv. Am testat scriptul într-un browser în timp ce eram autentificat în administrarea WordPress, apoi am încercat același script în Chrome și am realizat că nu funcționează. După ce am adăugat wp_ajax_nopriv, totul a început să meargă. :)

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();
}
8 feb. 2016 00:29:17
Comentarii

Acest lucru, prietene, m-a scutit de 2 ore de frustrare. Încă o lecție de învățat când deploy-ezi aplicația ta într-un alt mediu T_T

Tree Nguyen Tree Nguyen
1 iun. 2017 06:49:03

Este foarte adevărat...dacă ești logat ca admin atunci funcția _nopriv nu este apelată

Michal Holub Michal Holub
7 nov. 2017 15:48:30
1
10

V-aș recomanda să folosiți wp_send_json_success() și wp_send_json_error() pe partea de server.

Nu trebuie să vă faceți griji pentru die() etc, iar variabila "status" este trimisă automat, este mult mai curat în acest fel. De exemplu:

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

Va rezulta în ceva de genul acesta:

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

Așadar, puteți extrage cu ușurință valorile în apelul vostru 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);
         }

    }
}); 

Un alt lucru comun întâlnit sunt greșelile de scriere în numele acțiunii. Acestea ar trebui să fie wp_ajax_nopriv_{action} sau wp_ajax_{action} când sunteți autentificat. De exemplu, wp-ajax_nopriv, este o greșeală pe care am făcut-o de mai multe ori în trecut.

18 feb. 2017 21:07:43
Comentarii

acesta ar trebui să fie răspunsul corect și acceptat. uimitor!

eballeste eballeste
11 feb. 2020 19:32:59
0

Pentru mine, problema a fost că foloseam return în loc de echo în funcția PHP. Schimbarea în echo a rezolvat problema.

function doAjax() {
    $result = getPosts();
    echo json_encode($result, true);
    die();
}
29 mar. 2016 22:10:29
0

S-ar putea să uiți să adaugi următoarea linie:

add_action("wp_ajax_your_ajax_function", "your_ajax_function");

Fără această linie, funcția ajax nu va fi declanșată.

Iată funcția ta ajax:

function your_ajax_function(){ $result = json_encode($result); echo $result; }

24 dec. 2020 16:50:14
0

Lucru important de făcut, adăugarea corectă a acțiunii (hook) în functions.php

Am întâmpinat aceeași problemă, am încercat toate metodele, dar am omis un lucru simplu - să includ fișierul cu acțiunea în functions.php

// Adăugăm acțiuni pentru administrare și utilizatori neautentificați
add_action( 'wp_ajax_nopriv_erase_uploaded_images', 'erase_uploaded_images' );
add_action( 'wp_ajax_erase_uploaded_images', 'erase_uploaded_images' );

// Funcția pentru ștergerea imaginilor încărcate
function erase_uploaded_images() {
    // Obținem ID-ul atașamentului din cererea POST
    $attach_id = filter_input( INPUT_POST, 'attach_id' );
    
    // Ștergem atașamentul
    wp_delete_attachment( $attach_id );
    
    // Dacă există imagini încărcate în sesiune
    if ( isset( $_SESSION['uploaded_images'] ) ) {
        $array_attachments = $_SESSION['uploaded_images'];
        
        // Căutăm și eliminăm ID-ul atașamentului din array
        if ( ( $key = array_search( $attach_id, $array_attachments ) ) !== false ) {
            unset( $array_attachments[$key] );
        }
        
        // Actualizăm sesiunea cu array-ul modificat
        $_SESSION['uploaded_images'] = $array_attachments;
    }
    
    // Terminăm execuția scriptului
    wp_die();
}
29 nov. 2023 17:39:36