当前位置: 首页 > 面试题库 >

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

殳凯捷
2023-03-14
问题内容

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

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


问题答案:

通过与 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元素会引起麻烦。



 类似资料:
  • 问题内容: 当我用下面的代码来做一些本机支持的动画时: 直接致电会给… 未捕获的TypeError:非法调用 在Chrome中。为什么? 问题答案: 在您的代码中,您正在将本机方法分配给自定义对象的属性。当您调用时,它将在当前对象(即支持)的上下文中执行。为了使本机requestAnimationFrame函数正常工作,必须在的上下文中执行它。 因此,此处的正确用法是 。 警报也会发生相同的情况:

  • 问题内容: 我想每次发送ajax请求时显示一个“正在加载”进度栏。是否有可能在任何时候使用jQuery发送ajax请求时收到通知? 问题答案: 您可以使用该方法来设置将应用于整个页面的全局AJAX属性:

  • 问题内容: 我正在创建一个lambda函数,该函数执行带有具体参数的第二个函数。此代码在Firefox中有效,但在Chrome中不起作用,其检查器显示一个奇怪的错误。我的代码有什么问题? 问题答案: 控制台的日志功能希望(内部)引用控制台。考虑下面的代码,它可以复制您的问题: 这是一个有效的示例,因为它绑定到您的make函数中: 这也可以

  • 问题内容: 我正在尝试构建一个发出ajax请求的Google Chrome扩展程序。与GMail Checker扩展程序类似。问题是,当我使用jquery进行请求时,并输入了错误的用户名/密码时,它会静默失败,并忽略错误回调函数。 如果我将ajax调用从background.html脚本(在开发人员窗口中看不到请求)中移出到options.html脚本中,则会得到一个对话框来重新进行身份验证。如果

  • 问题内容: 我正在尝试做一些相当简单的事情,但是由于我可能不够出色而无法搜索文档,因此无法正常工作。 我有一个运行正常的内联JS,看起来像这样: 由于各种原因,我试图分离JS,而这正是我遇到的障碍。 我创建了以下测试页面,该页面给出了错误消息: 我唯一能找到的问题就是这样的问题,它无法使用但应该处理(这很适合我,因为我将其倒在一些图像上),所以我尝试添加以下无济于事: 在此先感谢您指出我做错了什么

  • 我试图使用Jquery发送一个Ajax POST请求,但我有400个错误请求。 这是我的代码: 它说:无法根据请求构建资源。我错过了什么?