【问题标题】:jquery: Uncaught TypeError: Illegal invocationjquery:未捕获的类型错误:非法调用
【发布时间】:2019-04-29 05:19:43
【问题描述】:

当我尝试将表单提交到服务器端代码上的操作时遇到问题,如下所示:

   [ValidateAntiForgeryToken]
   public async Task<ActionResult> DoRegister(UserRegistrationViewModel model)
   {
     // Some code here
   }

该表单还包含 Html.AntiForgeryToken(),因此这不是问题。 jQuery 代码如下所示:

 $('form').submit(function (event) {
        event.preventDefault();

        if ($(this).valid()) {

            StartLoading();
            var formdata = new FormData($(this).get(0));
            $.post("/User/DoRegister",formdata, function (data) {
                $(".registerLoader").fadeOut("fast");
                if (data.statusCode == 200) {
                    window.location.href = "/Plans";
                }
                else if (data.statusCode == 100) {
                    $("body").html(data.View);
                }
            });
        }
        return false;
    });

当我尝试提交表单时,我收到以下错误:

jquery: Uncaught TypeError: Illegal invocation 

我在这里做错了什么?有人可以帮帮我吗?

【问题讨论】:

  • 你能显示 formdata 包含哪些数据吗?
  • @MuhammadSaqlain 确定一下
  • @MuhammadSaqlain 如何读取表单数据的内容?当我做一个 console.log(formdata);我明白了: FormData {} proto: FormData append: ƒ append() delete: ƒ delete() entries: ƒ entries() forEach: ƒ forEach() get: ƒ () getAll: ƒ getAll () 有: ƒ has() 键: ƒ keys() 设置: ƒ () 值: ƒ values() 构造函数: ƒ FormData()
  • 有人吗? =)
  • 只是一个旁注$(this).get(0)this 是一样的——你把一个dom 对象变成一个jquery 对象只是为了再次得到这个dom 对象!

标签: javascript jquery asp.net asp.net-mvc asp.net-mvc-4


【解决方案1】:

问题是你传递的是一个 HTML 元素而不是它的值。你可以使用serializeArray

var formdata = $("form").serializeArray();

.serializeArray() 方法创建一个 JavaScript 对象数组,准备好被编码为 JSON 字符串。它对表单和/或表单控件的 jQuery 集合进行操作。

【讨论】:

  • 是的,就是这样!我想通了并想发布,但是是的,这就是解决方案! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-16
  • 2012-09-27
  • 1970-01-01
  • 1970-01-01
  • 2014-06-24
  • 2011-05-15
相关资源
最近更新 更多