JQuery: 'Uncaught TypeError: Illegal invocation' at ajax request - 几个元素

新手上路,请多包涵

我有两个选择元素,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 许可协议

阅读 655
2 个回答

多亏了与 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
};

注意: 查看 Jason Kulatunga 的 答案,它引用了 JQuery 文档来解释为什么传递 HTML 元素会导致麻烦。

原文由 Nadir Sampaoli 发布,翻译遵循 CC BY-SA 4.0 许可协议

我在发布 FormData 对象时收到此错误,因为我没有正确设置 ajax 调用。下面的设置解决了我的问题。

 var myformData = new FormData();
myformData.append('leadid', $("#leadid").val());
myformData.append('date', $(this).val());
myformData.append('time', $(e.target).prev().val());

$.ajax({
    method: 'post',
    processData: false,
    contentType: false,
    cache: false,
    data: myformData,
    enctype: 'multipart/form-data',
    url: 'include/ajax.php',
    success: function (response) {
        $("#subform").html(response).delay(4000).hide(1);
    }
});

原文由 Mike Volmar 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题