未发生jQuery的AJAX请求

时间:2014-08-08 作者:Mauricio Moraes

我的问题是:无法使用jQuery执行POST请求。下面是完整的描述:

我在页面中创建了一个链接(使用帖子和页面的插件PHP代码):

<?php
    $nonce = wp_create_nonce("test_nonce");
    $link = admin_url(\'admin-ajax.php?action=my_delete_object&object_id=\'.$object_id.\'&nonce=\'.$nonce);

    echo "<a data-object_id=\\"".$object_id."\\" data-nonce=\\"".$nonce."\\" href=\\"".$link."\\" class=\\"delete-object\\" >Click Here!</a>
?>
然后我将其添加到我的子主题函数中。php:

wp_enqueue_script( \'js_functions\', get_bloginfo( \'stylesheet_directory\' ) . \'/js/functions.js\', array( \'jquery\' ), false);
wp_localize_script( \'js_functions\', \'MyAjax\', array( \'ajaxurl\' => admin_url( \'admin-ajax.php\' ) ) );

add_action("wp_ajax_my_delete_object", "my_delete_object");
add_action("wp_ajax_nopriv_my_delete_object", "my_must_login");


function my_delete_object() {
    echo "<script> alert(\'test: ajax request reached action!\') </script>";
    // nonce check and other actions;
    $result[\'type\'] = "success";
    die(); 
}

function my_must_login() {
    //tell user to log in;
    $result[\'type\'] = "success";
    die();
}
如果单击该链接,我会收到警报(“测试:ajax请求已达到操作!”)正确,如果我向我的\\u delete\\u对象添加其他操作,它们也会发生。

当我想向场景中添加ajax请求时,问题就出现了。

在我的子主题文件夹中,我创建了该文件夹js, 然后把文件functions.js 内装内容:

jQuery(document).ready(function($) { 

   $(".delete-object").click( function(event) {
      event.preventDefault();

      object_id = $(this).attr("data-object_id");
      nonce = $(this).attr("data-nonce");

      $.post({
         url : MyAjax.ajaxurl,
         data : {action: \'my_delete_object\', object_id: object_id, nonce: nonce},
         success: function(response) {
            if(response.type == "success") {
               alert("Ajax request returned success!");
            }
            else {
               alert("Ajax request returned something else.");
            }
         },
         error: function(){
              alert("Ajax request no good");
         }
      });   
      alert(\'click triggered action!\');
   });

 });
当我点击链接时,它什么也不做。它只会弹出警报“单击触发的操作!”,其他什么都没有。

我的结论是,这篇文章没有发生。知道为什么吗?

1 个回复
最合适的回答,由SO网友:Mauricio Moraes 整理而成

经过长时间的努力,我解决了我的问题,这就是为什么我想我应该为有这样问题的人列出一些建议:

如果更改javascript文件,请使用ctrl+f5 强制重新加载页面和资源。缓存几乎让我抓狂,因为我更改了文件,但更改没有发生f12 然后转到“网络”选项卡。提交并单击以查看详细信息。首先,我看不到服务器在响应什么,这个工具对我帮助很大使用wp_send_json_success( $data ); 在您的admin-ajax.php 和设置dataType : \'json\' 在ajax调用中

  • 为登录用户和非登录用户创建操作。如果忘记创建操作,则可能无法工作。就我而言,这是一句台词:add_action("wp_ajax_nopriv_my_delete_object", "my_must_login");
  • 这条指导原则会让我省去一些头发!:)

    结束

    相关推荐

    AJAX根据类别过滤点击帖子

    这是我第一次涉足AJAX,我一直在拼接各种教程中的代码,但可能没有帮助。我的主页(index.php)上有一个类别列表和一个最近帖子的列表。当用户单击某个类别时,我希望更新此帖子列表,而不刷新页面。当前,当我单击一个过滤器时,所有帖子都会加载到我的响应容器中(它不是按类别过滤),并且加载的唯一内容是\\u content(),即使我的模板(listing post.php)要求缩略图、类别等。我使用骨骼作为启动主题,因此wp\\u localize\\u脚本位于该文件中(它正在工作)。我只包含了我知道有问