首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在ajax请求时,JQuery:'Uncaught :非法调用‘-几个元素

在ajax请求时,JQuery:'Uncaught :非法调用‘-几个元素
EN

Stack Overflow用户
提问于 2012-06-17 19:53:57
回答 7查看 232.4K关注 0票数 129

我有两个select元素,A和B:当A的选定选项发生变化时,B的选项必须相应地更新。A中的每个元素都包含B中的多个元素,这是一对多关系(A包含国家,B应该包含位于给定国家的城市)。

函数do_ajax应该运行异步请求:

代码语言:javascript
复制
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事件时运行的函数:

代码语言:javascript
复制
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 docs中读到data可以是一个数组(键值对)。如果我放入以下内容,我会得到错误:

代码语言:javascript
复制
var data = {
        'mode': 'filter_city',
        'id_A': e[e.selectedIndex]
};

相反,如果我的数据是一个字符串,我就不会得到这个错误:

代码语言:javascript
复制
var data = 'mode=filter_city&id_A=' + e[e.selectedIndex];

但是在我的服务器端php代码中,我需要变量的“数组版本”。

Uncaught TypeError: Illegal invocation位于"jquery-1.7.2.min.js“文件中,该文件都是压缩的,所以我不知道是哪部分代码引起了这个错误。

在我的代码中有没有什么我可以修改的设置,这样它就可以接受数据作为一个关联数组?

EN

回答 7

Stack Overflow用户

发布于 2018-01-29 23:35:40

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

代码语言:javascript
复制
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); 
    }
});
票数 49
EN

Stack Overflow用户

发布于 2017-04-10 23:21:52

最近遇到了同样的问题,通过添加traditional: true,解决了这个问题

票数 11
EN

Stack Overflow用户

发布于 2020-12-07 18:55:54

请按照以下步骤解决此问题:

代码语言:javascript
复制
$.ajax({
   url: 'https://your-api-endpoint',
   type: 'post',
   data: new formData(this),
   processData: false,
   contentType: false,
   success: function(response) {
      console.log(response)
   }
})

您必须使用processData: false和contentType: false这两行代码。你的问题就解决了。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11071100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档