为什么这个ajax帖子没有正常工作?

时间:2011-06-02 22:43:05

标签: javascript ajax

下面的函数会发布一个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'变量没有?

3 个答案:

答案 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));