Mam problem z tym, że AJAX zawsze zwraca 0!
Zrobiłem wszystko według książki i nie mogę zrozumieć, co jest nie tak? Proszę pomóż!!
Oto moja rozmowa z Ajaxem:
//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;
A funkcja w functions.php to:
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' )
aby uzyskać adres URL AJAX, a nie jakiś skompilowany adres URL.Odpowiedzi:
Czy możesz umieścić akcję (ajaxConversion) w swoich danych i sprawdzić?
źródło
użycie
wp_die();
na końcu funkcji AJAX naprawiło problem.na przykład
źródło
Dla mnie sztuczką było dodanie
wp_ajax_nopriv
akcji. Testowałem skrypt w jednej przeglądarce, kiedy byłem zalogowany w WP admin, a następnie wypróbowałem ten sam skrypt w Chrome i zdałem sobie sprawę, że skrypt nie działa. Po założeniuwp_ajax_nopriv
wszystko zaczęło działać. :)źródło
Poleciłbym użycie wp_send_json_success () i wp_send_json_error () po stronie serwera. Nie musisz się martwić o die () itp., A zmienna „status” jest wysyłana automatycznie, dzięki temu jest znacznie czystsza. Na przykład
Spowoduje to coś takiego:
Więc możesz łatwo wyodrębnić wartości w wywołaniu ajax:
Inną częstą rzeczą, na którą się natknąłem, są literówki w nazwie akcji. Powinny to być wp_ajax_nopriv_ {akcja} lub wp_ajax_ {akcja} po zalogowaniu. Na przykład wp-ajax_nopriv, zrobiłem kilka razy w przeszłości.
źródło
Dla mnie był to fakt, że używałem
return
zamiastecho
w mojej funkcji PHP. Zmieniając to, abyecho
to naprawić.źródło