下面的函数会发布一个AJAX帖子。 makepostrequest只是一个标准的ajax post请求函数我写道,我已经省略了,因为它不是问题的根源。下面的函数不会发送'小部件'。
function widgets_positions(){
var widgets = '';
var col_1 = document.getElementById('col_1');
var col_2 = document.getElementById('col_2');
var col_3 = document.getElementById('col_3');
for(i = 0; i < col_1.childNodes.length; i++) {
var str1 = col_1.childNodes[i].className;
if(str1 && str1.match('widget')) widgets+='&c[1]['+i+']='+col_1.childNodes[i].id;
}
makePOSTRequest('/ajax.php',"widgets="+widgets);
return true;
}
但如果代替'小部件',我会尝试发布
var random = 'sumo'
makePOSTRequest('/ajax.php',"widgets="+random);
它有效。
不仅如此,如果我在'makepostrequest'
之前在上面放置了一个echo命令,'widgets'
会在clinetside上打印出c[1]c[1]blahblah
。
那么为什么var random = 'sumo'
被发送但'widgets'
变量没有?
答案 0 :(得分:3)
这是因为'小部件'以&amp;开头,它将标记该请求中另一个变量定义的开头。所以'小部件'是空的。
尝试删除'&amp;',并在服务器端相应地解析它以正确读取每个小部件。
答案 1 :(得分:0)
可能是缓存了吗?清除浏览器缓存,然后如果有效,请在ajax.php中添加缓存过期。
答案 2 :(得分:0)
widgets+='&c[1]['+i+']='+col_1.childNodes[i].id;
makePOSTRequest('/ajax.php',"widgets="+widgets);
所以你最终会得到表单编码的字符串:
widgets=&c[1][0]=foo&c[1][1]=bar
即widgets
参数,其中包含空字符串值,然后是c[1][0]
参数,其值为foo
,依此类推。那是你想要的吗?
如果您确实想将整个&c[1][0]=foo&c[1][1]=bar
字符串打包到widgets
参数中,那么您需要的字符串将是:
widgets=%26c[1][0]=foo%26c[1][1]=bar
将这些&符分隔符转换为URL编码版本,以便它们不会拆分表单数据。要做到这一点,你会说:
makePOSTRequest('/ajax.php',"widgets="+encodeURIComponent(widgets));