![](/img/trans.png)
[英]Why isn't my form working correctly when trying to post something using Ajax and an external PHP file, which is receiving two strings?
[英]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.