【问题标题】:Ajax call in wordpress doesn't go to admin-ajax.phpwordpress 中的 Ajax 调用不会转到 admin-ajax.php
【发布时间】:2017-02-23 05:26:50
【问题描述】:

我正在尝试在 wordpress 管理子菜单中使用 ajax 调用函数。这是我的代码。

jQuery('#deleteProj').submit(ajaxSubmit);

function ajaxSubmit(){ 
  var tobeDeleted = jQuery(this).serialize();
  alert(tobeDeleted);
  jQuery.ajax({
     type:"POST",
     url: ajaxurl,
     data: tobeDeleted,
     success:function(){ alert(tobeDeleted);},
     error:function(errorThrown){alert(errorThrown);}
  });
  return false;
}

但是,代码打开一个新页面查询 admin.php 文件如下所示:

wp/wp-admin/admin.php?q=id&action=deleteproj

我真的不知道为什么会这样。我从插件的管理菜单中调用该函数

更新

问题原来是我必须在插件的主文件上定义 php 函数。我还确保绝对定义 admin-ajax.php 的位置,这允许 jQuery 正确执行。

【问题讨论】:

  • 好像你在重定向而不是 ajaxing
  • 更改为 onclick 没有帮助,这可能是由于我试图在 admin.php 中调用造成的吗?
  • 你确定你的页面上有js,包裹在一个文档准备声明中吗?

标签: javascript php jquery ajax wordpress


【解决方案1】:

试试这个:

jQuery('#deleteProj').submit(function() {
    var ajaxurl = "<?php echo admin_url('admin-ajax.php'); ?>";
    var formData= jQuery(this).serialize();
    jQuery.ajax({
    url:ajaxurl,
    action:'function_name',
    data:formData,
    type: "POST",
    success: function(data) {
      // return
   }
   });
    return false; 
});

问候:)

【讨论】:

    【解决方案2】:

    您似乎是在重定向而不是 ajaxing,尝试将您的提交事件更改为点击事件

    jQuery('#deleteProj').find('[type="submit"]').click(function(e){ 
      e.preventDefault();
      var tobeDeleted = jQuery(this).serialize();
      alert(tobeDeleted);
      jQuery.ajax({
         type:"POST",
         url: ajaxurl,
         data: tobeDeleted,
         success:function(){ alert(tobeDeleted);},
         error:function(errorThrown){alert(errorThrown);}
      });
    });
    

    【讨论】:

      【解决方案3】:

      如果您在 php 文件中编写了代码,那么 Gulshan 的答案是正确的,但如果您将此代码编写在不同的 .js 文件中,则无法访问其中的 ajax url。然后您需要本地化脚本以添加 ajax url。

      请按照示例代码:

      wp_enqueue_script( 'mainscript', get_template_directory_uri() . '/js/main.js', array(), 'v1', true );
      wp_localize_script( 'mainscript', 'sitesettings', array('ajaxurl' => admin_url( 'admin-ajax.php' )));
      

      对于这两个函数,您需要放置相同的句柄 ['mainscript'],现在在您的 main.js 文件中,您需要编写以下代码:

       jQuery('#deleteProj').submit(function() {
          var ajaxurl = sitesettings.ajaxurl; // here you are accessing the admin-ajax.php
          var formData= jQuery(this).serialize();
          jQuery.ajax({
          url:ajaxurl,
          action:'function_name',
          data:formData,
          type: "POST",
          success: function(data) {
            // return
         }   });
          return false; 
      });
      

      希望这对你有用

      【讨论】:

        猜你喜欢
        • 2021-02-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-25
        • 2014-12-09
        • 1970-01-01
        相关资源
        最近更新 更多