繁体   English   中英

为什么这个 ajax 帖子不能正常工作?

[英]Why isn't this ajax post working correctly?

下面的 function 制作了 AJAX 帖子。 makepostrequest 只是一个标准的 ajax 发布请求 function 我写了我已经省略了,因为它不是问题的根源。 下面的 function 不发送“小部件”。

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'变量却没有呢?

这是因为“小部件”以 & 开头,这将标记该请求中另一个变量定义的开始。 所以“小部件”是空的。

尝试删除那个'&',并在服务器端相应地解析它以正确读取每个小部件。

可能是被缓存了? 清除浏览器缓存,如果有效,则在 ajax.php 中添加缓存到期。

widgets+='&c[1]['+i+']='+col_1.childNodes[i].id;
makePOSTRequest('/ajax.php',"widgets="+widgets);

所以你最终会得到表单编码的字符串:

widgets=&c[1][0]=foo&c[1][1]=bar

也就是说,一个带有空字符串值的widgets参数,然后是一个带有foo值的c[1][0]参数,依此类推。 那是你想要的吗?

如果您真的想将整个&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));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM