成功不是从ajax帖子返回的

时间:2015-10-31 10:36:59

标签: php jquery wordpress

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");

1 个答案:

答案 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
                }
            }
        });
    });
});

希望这有助于您从这里开始,当您单击应显示在管理屏幕左上角的按钮时可以正常工作(放大;))