使用同一ajax_object.ajaxurl的多个AJAX请求

时间:2016-01-12 作者:shmuli

我有一个插件,可以使用ajax_object.ajaxurl. 两个AJAX请求都编码在同一个文件(emx functions.js)中。然而,似乎只有一个AJAX调用成功启动。我是否仅限于使用ajaxurl 仅针对单个AJAX请求,或者我可以使用相同的ajaxurl. 我认为另一个AJAX调用不起作用的原因是由于冲突,因为它们都使用相同的ajaxurl. 对吗?有没有更好的方法?

下面是我如何设置AJAX的:

function load_ajax_scripts() {
  wp_enqueue_script( "emx-functions", plugin_dir_url( __FILE__ ) . \'emx-functions.js\', array( \'jquery\' ) );
  wp_localize_script( \'emx-functions\', \'EMX\', array( \'ajaxurl\' => admin_url( \'admin-ajax.php\' ) ) );
}
add_action(\'wp_print_scripts\', \'load_ajax_scripts\');
以下是来自emx函数的代码。js文件:

function disable_forms_ajax(){

  var disable;

  jQuery(document).ready(function(){

    // if checkbox checked
    if( jQuery(\'input[name="all_fields_or_not[]"]:visible:checked\').length == 1 ){
      $disable = \'true\';
      // take this out
      alert(\'checked\');
    } else {
      $disable = \'false\';
      // take this out
      alert(\'unchecked\');
    }

        // get ticket_id
    $ticket_id = jQuery(\'[value="Save Coupons"]:visible\')
                .parent()
                .parent()
                .children(\'input:first\').val();

    var data = {
      action: \'hidden_form_fields\',
      ticket_id: $ticket_id,
      disable: $disable
    };

    jQuery.post(EMX.ajaxurl, data, function(response) {
      alert(response);
    });
    return false;
  });
}

function available_coupons_ajax(){

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

      // get ticket_id
      $ticket_id = jQuery(\'[value="Save Coupons"]:visible\')
                  .parent()
                  .parent()
                  .children(\'input:first\').val();

      // get checked coupon elements
      $coupon_els = jQuery(\'input.button[value="Save Coupons"]\')
                      .closest(\'form[name="ticket-coupons"]:visible\')
                      .find(\'input:checked\');

      // convert to array and get coupon codes
      $coupon_codes = Array.prototype.slice.call($coupon_els).map(function(el){
        return el.value.toLowerCase();
      });

      // prepare ajax call
      var data = {
        action: \'set_ticket_coupon_availability\',
        ticket_id: $ticket_id,
        coupon_codes: $coupon_codes
      };

      // ajax call
      jQuery.post(EMX.ajaxurl, data, function(response) {
        alert(response);
      });
      return false;
    });

}
谢谢大家!

1 个回复
SO网友:WPTC-Troop

为了澄清您的疑问,在重写之前,本地化变量将包含相同的值。

在你的情况下EMX.ajaxurl 将通过脚本提供。Ajax没有在预期的事件中发生可能是因为没有执行Ajax函数,但是definetly not due to EMX.ajaxurl. EMX.ajaxurl 将包含ajax url。

EMX.ajaxurl 可以多次使用,除非被重写。因此,我猜您没有在预期的时间正确地调用ajax函数。您需要执行disable_forms_ajax(), available_coupons_ajax() 无论何时您想要制作ajax。另外,请确保是否有任何脚本错误阻止生成ajax。

相关推荐

尝试在WordPress中实现AJAX注释,遇到WP错误

我试图在WordPress中为我的评论实现Ajax,使用this tutorial. 但我在将教程中的代码集成到自己的预构建主题时遇到了问题。问题是,我要么得到一个WP错误“检测到重复注释;看来你已经说过了!”或标准500错误。以下是我得到的:下面是我对ajax的评论。js文件如下所示: * Let\'s begin with validation functions */ jQuery.extend(jQuery.fn, { /* * check i