4 回答
您必须自己生成要在 POST 中发送的查询字符串。这是要使用的 HTML 标记:
<select multiple name="categories[]" onchange="sendCategories(this);">
和 Javascript 函数:
function sendCategories(sel){
var xmlhttp;
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
} else {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
document.getElementById("my_div").innerHTML = xmlhttp.responseText;
}
};
xmlhttp.open("POST","http://www.mysite.com/update_categories.php",true);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
var values = [], i, j, cur;
for (i = 0, j = sel.options.length; i < j; i++) {
cur = sel.options[i];
if (cur.selected) {
values.push(encodeURIComponent(cur.value));
}
}
if (values.length) {
values = encodeURIComponent(sel.name) + "=" + values.join("&" + encodeURIComponent(sel.name) + "=");
} else {
values = null;
}
xmlhttp.send(values);
}
请注意,我将事件从 更改onclick
为onchange
,但这取决于您是否希望在单击元素时运行此函数,或者它的值确实发生了变化......它可以减少一些不必要的调用。
这应该生成一个查询字符串,该查询字符串通常用于为<select>
选择了多个选项的 a 发送值。
这是一个 jsFiddle,它演示了如何在此处生成查询字符串:http: //jsfiddle.net/kKWQM/
你可以做这样的事情,
<select multiple name="categories[]" onclick="sendCategories(this)">
并使用 JQuery 制作 AJAX,
function sendCategories(sel){
var values = $(select).serialize();
console.log (values); // See if you get the serialized data in console.
$.ajax({
type: 'POST',
url: "http://www.mysite.com/update_categories.php"
data: values,
success: function (data) {
document.getElementById("my_div").innerHTML = data;
}
});
}
仅供参考,不推荐使用 Netscape 事件绑定模型,您可以像这样使用跨浏览器事件绑定
您可以使用 JS 字符串和数组函数来实现该解决方案。实际上,您需要发送到 Apache 的字符串应该包含如下模式:
xxx[]=a&xxx[]=b&xxx[]=c
其中 SELECT 元素的名称xxx[]
在您的表单中,a、b 和 c 是用户选择的三个值。
所以是的,您重复键名的次数与用户在 SELECT 中选择的不同选项一样多。
在 JS 中,您可以使用一组选定的选项:
selected_options.join("&xxx[]=") to produce that pattern.
jQuery 应该让你更容易做到这一点。在包装的选择上调用 .val() 会返回一个包含所选值的数组。您只需将这些发布到服务器:
HTML:
<html>
<body>
<form>
<select name="mySelect" multiple="on">
<option value="1">Uno</option>
<option value="2">Dos</option>
<option value="3">Tres</option>
</select>
</form>
<input id="submitButton" type="button" value="Click To Submit"/>
</body>
</html>
JavaScript:
$(function() {
$('#submitButton').click(function() {
var valuesArray = $('select[name=mySelect]').val()
$.ajax({
type: 'POST',
url: '/path/to/php', // your php url would go here
data: { mySelect: valuesArray }
}).done(function(msg) {
// parse response from msg
});
});
});