我目前正在编辑一个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是如何处理的?每个帖子/变量都必须是唯一的吗?
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
和friends中创建一个数组。如果没有,那么它将丢弃除最后一个项目之外的所有项目。(除非我记错了,它保留了第一个)。
您可以使用jQuery使用ajax。。然后您可以传递变量的多个实例:-
像这样:-
if(roleId !='' && roleId != '16'){
jQuery('#user_id_div').hide();
jQuery('#loading_image').show().html("<label> </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字段中,您可以将许多数据作为可用数据发布。。