小编典典

jQuery:在ajax请求中出现“未捕获的TypeError:非法调用”-几个元素

ajax

我有两个选择元素,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事件中添加了一个函数调用。这A是触发onChange事件(of )时运行的函数:

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”的文件,这是所有的压缩,所以我无法弄清楚哪些代码部分提出的错误。

我可以在代码中进行任何设置更改,使其接受数据作为关联数组吗?


阅读 404

收藏
2020-07-26

共1个答案

小编典典

通过与 Sarfraz 的交谈,我们可以找到解决方案。

问题是我传递了HTML元素而不是它的值,这实际上是我想要做的(实际上,在我的php代码中,我需要将该值作为查询cities表和过滤正确条目的外键)。

因此,代替:

var data = {
        'mode': 'filter_city',
        'id_A': e[e.selectedIndex]
};

它应该是:

var data = {
        'mode': 'filter_city',
        'id_A': e[e.selectedIndex].value
};

注意: 检查JasonKulatunga的答案,它引用JQuery文档来解释为什么传递HTML元素会引起麻烦。

2020-07-26