【问题标题】:How does AJAX handle multiples instances of a variable?AJAX 如何处理一个变量的多个实例?
【发布时间】:2012-03-21 12:27:24
【问题描述】:

我目前正在编辑一个 WordPress 插件,它允许您按类别过滤帖子,一旦选择了一个类别,该类别的帖子就会显示为小部件上的清单,用户可以选择他们希望显示的帖子在主题的侧边栏/小部件区域中。

我已经将小部件带到了用户可以选择他们的帖子的程度,小部件允许选择单个帖子,但是如果选择了多个帖子并按下了保存按钮,则表单仅返回最后选择的发帖。

经过一番搜索,我发现问题出在表单返回上。 它要么与更新有关,要么与 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 如何处理这个问题?每个帖子/变量是否必须是唯一的?

【问题讨论】:

  • 在帖子中发送数组时,其名称应类似于“name[]”,例如var postData={'ids[]':idArray}。检查此以获取更多详细信息http://stackoverflow.com/questions/299610/how-can-i-send-an-array-to-php-through-ajax
  • @sakhunzai object_to_use 已重命名为包含方括号,现在似乎一切正常。谢谢

标签: php jquery ajax


【解决方案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 和朋友中创建一个数组。如果没有,那么它将丢弃除最后一项之外的所有内容。 (除非我记错了,而是保留第一个)。

【讨论】:

  • 感谢@Quentin,您提供的信息非常有用,据我了解,回答了我的问题,并指出问题不在于 AJAX,而在于我的@987654325 PHP中的@变量
【解决方案2】:

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

像这样:-

 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 字段中,您可以将许多数据作为变量发布..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多