2012-03-21 34 views
1

我目前正在编辑一个WordPress插件,它允许您按类别过滤帖子,一旦选择了一个类别,该类别的帖子显示为小工具上的核对清单,用户可以选择他们希望显示的帖子他们的边栏/小部件区域的主题。AJAX如何处理变量的多个实例?

我已经拿到了小部件,用户可以选择他们的帖子,小部件允许选择一个帖子,但是如果选择了多个并且按下保存按钮,表单将只返回最后一个当选职位。

经过一番搜索,我发现问题是在窗体返回。 它可能与更新有关,或者AJAX处理变量的多个实例的方式。

发送到服务器的信息如下:

action save-widget 
add_new 
id_base single_post_super_widget 
multi_number  
savewidgets 9bc3d79f1c 
sidebar lcp-sb 
widget-height 200 
widget-id single_post_super_widget-2 
widget-single_post_super_widget[2][object_to_use] 5005 
widget-single_post_super_widget[2][object_to_use] 4892 
widget-single_post_super_widget[2][object_to_use] 4607 
widget-single_post_super_widget[2][object_type] 72 
widget-single_post_super_widget[2][paged] 1 
widget-single_post_super_widget[2][tab] all 
widget-single_post_super_widget[2][title_override] 
widget-width 400 
widget_number 2 

object_to_use是后(一个或多个)被选择。

在这里被定义发送的信息:

var theArgs = { 
    action: jQuery('input.widget_class:hidden', widgetDiv).first().val() + '-get-metabox', 
    widget: widgetDivId, 
    number: widgetNumber, 
    blog_id: jQuery(widgetInputBase + 'blog_id').val(), 
    object_type: jQuery(widgetInputBase + 'object_type').val(), 
    tab: currentTab, 
    paged: currentPage, 
    object_to_use: jQuery('input[type=checkbox][name$="[object_to_use]['+currentTab+']"]:checked', widgetDiv).first().val(), 
    title_override: jQuery(widgetInputBase + 'title_override').val(), 
    excerpt_override: jQuery(widgetInputBase + 'excerpt_override').val(), 
    searched: ('search' == currentTab) ? jQuery('input.quick-search', widgetDiv).first().val() : '' 
}; 

和jQuery.post行动:

jQuery.post(
    ajaxurl, 
    theArgs, 
    function(r) { 
     jQuery('.ajax-feedback').css('visibility', 'hidden'); 
     if (r && r.length > 2) { 
      jQuery('div.widget-content', widgetDiv).html(r); 
     } 
    } 
); 

关于这个问题,widget-single_post_super_widget[2][object_to_use]被张贴多次,我们如何处理AJAX这个?每个帖子/变量是否必须是唯一的?

+1

在post中发送数组时,它的名字应该像“name []”,例如'var postData = {'ids []':idArray}'。检查这进一步的细节'http:// stackoverflow.com/questions/299610 /如何,我发送数组到php通过ajax' – sakhunzai 2012-03-21 15:30:07

+0

@sakhunzai'object_to_use'已被重命名为包含方括号,现在似乎都在工作。谢谢 – 2012-03-21 15:47:41

回答

1

widget-single_post_super_widget[2][object_to_use]被张贴了多次,AJAX如何处理?

没有关于此的具体Ajax。您只需在提交给服务器的数据中获得密钥的多个副本。

每个帖子/变量是否必须是唯一的?

号在大多数服务器端环境中,你可以通过使用正确的函数获取所有数据。例如Perl的CGI.pm模块,你刚才得到的参数列表环境:

my @thing = $cgi->param('widget-single_post_super_widget[2][object_to_use]'); 

...,它会“只是工作”。

PHP很特别。如果名字以[]结尾,那么它只会在$_POST和朋友中创建一个数组。如果没有,那么它会丢弃除最后一个项目之外的所有项目。 (除非我误解,而是保持第一位)。

+0

感谢@Quentin,你提供的信息是非常有用的,并且从我理解的问题中回答我的问题,并且告诉我这个问题不在AJAX中,而是在PHP中使用我的'object_to_use'变量 – 2012-03-21 15:01:18

0

您可以使用Ajax使用jQuery ..然后你可以传递变量的多个实例: -

这样的: -

if(roleId !='' && roleId != '16'){ 
       jQuery('#user_id_div').hide(); 
       jQuery('#loading_image').show().html("<label> &nbsp; </label> <img src='<?php echo $this->webroot; ?>img/ajax-loader.gif' alt='Loading...'>"); 
       urlData = "<?php echo Router::url(array('controller' => 'users', 'action' => 'getmultipleVendors')) ?>" ; 
       postData = "vendorType=" + roleId; 

       jQuery.ajax({ 
        url: urlData, 
        data: postData, 
        success: function(data) { 
         jQuery('#PromoCodeUserId').html(data); 
         jQuery('#user_id_div').show(); 
         jQuery('#loading_image').hide(); 

        } 
       }); 
在POSTDATA场

您可以发布许多数据,avariables ..