我有两个选择元素,A 和 B:当 A 的选定选项更改时,B 的选项必须相应更新。 A 中的每个元素都意味着 B 中的许多元素,这是一对多的关系(A 包含国家,B 应该包含位于给定国家的城市)。
函数 do_ajax
应该运行异步请求:
function do_ajax(elem, mydata, filename)
{
$.ajax({
url: filename,
context: elem,
data: mydata,
datatype: "html",
success: function (data, textStatus, xhr) {
elem.innerHTML = data;
}
});
}
为了更新 B 的选项,我在 A 的 onChange
事件中添加了一个函数调用。这是触发 onChange 事件(的 A
)时运行的函数:
function my_onchange(e) // "e" is element "A"
{
var sel_B = ... ; // get select element "B"
// I skipped some code here
// ...
var data = {
'mode': 'filter_city',
'id_A': e[e.selectedIndex]
};
do_ajax(city_sel, data, 'ajax_handler.php');
}
}
我在 JQuery 文档 中读到 data
可以是一个数组(键值对)。如果我输入以下内容,我会收到错误消息:
var data = {
'mode': 'filter_city',
'id_A': e[e.selectedIndex]
};
相反,如果我的数据是字符串,我不会收到该错误:
var data = 'mode=filter_city&id_A=' + e[e.selectedIndex];
但我需要变量的“数组版本”,在我的服务器端 php 代码中。
Uncaught TypeError: Illegal invocation
位于“jquery-1.7.2.min.js”文件中,该文件全部被压缩,所以我无法弄清楚代码的哪一部分引发了错误。
我可以在我的代码中更改任何设置,以便它接受数据作为关联数组吗?
原文由 Nadir Sampaoli 发布,翻译遵循 CC BY-SA 4.0 许可协议
多亏了与 Sarfraz 的谈话,我们才能找到解决方案。
问题是我传递了一个 HTML 元素而不是它的值,这实际上是我想要做的(事实上,在我的 php 代码中,我需要该值作为外键来查询我的
cities
表和过滤正确的条目)。所以,而不是:
它应该是:
注意: 查看 Jason Kulatunga 的 答案,它引用了 JQuery 文档来解释为什么传递 HTML 元素会导致麻烦。