AJAX Post未在wordpress中返回成功通话。我有以下代码,我可以在测试中找到第一个对话框,但是没有关于我做什么它没有到达第二个。它在functions.php
中没有找到该功能,即使我声明了它。
jQuery(document).ready(function(){
jQuery("#send_btn").click(function(){
var datastring = $("#redemmpointsForm").serialize();
var points = $('#points').val();
var comments = $('#comments').val();
jQuery.ajax({
type : "post",
dataType : "json",
url : myAjax.ajaxurl,
data : {"action": "redeempoints", "points":points},
success: function(response) {
if(response.type == "success") {
alert('do i get here');
}
else {
// Do something else
}
}
});
});
}); //Modal event Ends
functions.php文件
wp_localize_script( 'inkthemes', 'MyAjax', array( 'ajaxurl' => admin_url( 'admin-ajax.php')));
function functionRedeempoints() {
die();
return true;
}
add_action("wp_ajax_functionRedeempoints", "functionRedeempoints");
add_action("wp_ajax_nopriv_functionRedeempoints", "functionRedeempoints");
好的,所以我想了以下
jQuery(document).ready(function(){
jQuery("#send_btn").click(function(){
var points = jQuery('#points').val();
var comments = jQuery('#comments').val();
var allData = {
action: 'functionRedeempoints',
points: points,
comments:comments
}
var data = JSON.stringify(allData);
alert( data);
jQuery.ajax({
type : "post",
dataType : 'json',
url : myAjax.ajaxurl,
data : data,
success: function(response) {
if(response.success) {
alert('do i get here');
}
else {
// Do something else
}
}
});
});
}); //Modal event Ends
我的FUCNTIONS php它就像它没有填补php功能一样。
wp_localize_script( 'inkthemes', 'MyAjax', array( 'ajaxurl' => admin_url( 'admin-ajax.php')));
function functionRedeempoints() {
wp_send_json_success(true);
}
add_action("wp_ajax_redeempoints", "functionRedeempoints");
add_action("wp_ajax_nopriv_redeempoints", "functionRedeempoints");
答案 0 :(得分:3)
问题是你的函数functionRedeempoints不会返回ajax调用可以处理的任何内容。
它甚至在return语句之前就已经死了。 此外,PHP端的返回将永远不会被JS解释。 JS只能从http请求中读取,因此您需要通过echo语句实际写入它。
Wordpress为您提供了一种方便的方法: 你需要的是:
function functionRedeempoints() {
wp_send_json_success(true);
}
这已经解决了停止执行和JSON编码响应的问题。
JS方面的正确响应处理与示例代码中的响应处理略有不同。 你可以在这里找到相关的详细信息: https://codex.wordpress.org/Function_Reference/wp_send_json_success
但它归结为成功是在响应的result.success属性中编码的。
因此,您希望支票
if(response.success)
而不是if(response.type == "success")
通过这些更改,您的示例应该可用:)
基于代码的工作示例(以插件形式):
将它放在插件文件夹
中的hello.php中<?php
/*
Plugin Name: Ajax demo
*/
function test_load_js() {
wp_register_script( 'ajax_demo', plugins_url( 'hello.js' ), array( 'jquery' ) );
wp_localize_script( 'ajax_demo', 'MyAjax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
wp_enqueue_script( 'ajax_demo' );
}
function functionRedeempoints() {
wp_send_json_success( true );
}
add_action( "wp_ajax_functionRedeempoints", "functionRedeempoints" );
add_action( "wp_ajax_nopriv_functionRedeempoints", "functionRedeempoints" );
add_action( "init", "test_load_js" );
if ( ! defined( 'DOING_AJAX' ) ) {
echo '<input type=button value="send" id="send_btn">';
}
将它放在插件文件夹
中的hello.js中jQuery(document).ready(function () {
jQuery("#send_btn").click(function () {
var points = jQuery('#points').val();
var comments = jQuery('#comments').val();
var data = {
action: 'functionRedeempoints',
points: points,
comments: comments
};
alert(JSON.stringify(data));
jQuery.ajax({
type: "post",
dataType: 'json',
url: MyAjax.ajaxurl,
data: data,
success: function (response) {
if (response.success) {
alert('do i get here');
}
else {
// Do something else
}
}
});
});
});
希望这有助于您从这里开始,当您单击应显示在管理屏幕左上角的按钮时可以正常工作(放大;))