Javascript options.data.indexOf在执行ajax POST时不是函数

Javascript options.data.indexOf在执行ajax POST时不是函数,javascript,jquery,ajax,Javascript,Jquery,Ajax,我收到以下错误:未捕获类型错误:options.data.indexOf不是函数 我寻找了一个解决方案,发现这可能是因为jQuery版本(顺便说一句,我有jQuery 3.3.1)。但是大多数问题都很简单,比如$(window).on('load',…),而不是$(window).load(…)。这一次我不知道到底发生了什么 下面是代码: function changePhotoPOST() { var form = document.getElementById('someFormNam

我收到以下错误:
未捕获类型错误:options.data.indexOf不是函数

我寻找了一个解决方案,发现这可能是因为jQuery版本(顺便说一句,我有jQuery 3.3.1)。但是大多数问题都很简单,比如
$(window).on('load',…)
,而不是
$(window).load(…)
。这一次我不知道到底发生了什么

下面是代码:

function changePhotoPOST() {
   var form = document.getElementById('someFormName');
   var formData = new FormData(form);
   $.ajax({
      type: "POST",
      url: "...someUrl...",
      data: formData,
      processData: false,
      contentType: false,
      success: onSuccess,
      error: onFailed
   });
}
表单如下所示:

<form id="someFormName">
      <input type="text" value="@User.Identity.Name" name="Email" hidden />
      <input id="file" type="file" onchange="changePhotoPOST()" name="File" hidden />
      <a class="some classes" onclick="document.getElementById('file').click(); return false">Some text</a>
 </form>

一些文本
我使用一个样式化的链接来打开文件选取器,一旦选取了一个文件,我就提交表单。尽管如此,表单还是可以是一个带有可见输入的普通表单,我认为这并不重要

因此,当文件被选中,表单被提交时,我得到了提到的错误。据我所知,出于某种原因,indexOf用于“数据”上?有语法错误吗?我可以在不更改jQuery版本的情况下解决此问题吗?

使用如下表单数据:

function changePhotoPOST() {
 var form = $("form").serialize();
   var formData = new FormData(form);
   $.ajax({
      type: "POST",
      url: "...someUrl...",
      data: formData,
      processData: false,
      contentType: false,
      success: onSuccess,
      error: onFailed
   });
}
使用表单数据,如:

function changePhotoPOST() {
 var form = $("form").serialize();
   var formData = new FormData(form);
   $.ajax({
      type: "POST",
      url: "...someUrl...",
      data: formData,
      processData: false,
      contentType: false,
      success: onSuccess,
      error: onFailed
   });
}

不确定是否粘贴了使用的确切代码,但元素id错误

似乎有效(我没有接收数据的url,但请求已发送)

HTML:

它使用jQuery 3.3.1;

不确定是否粘贴了使用的确切代码,但元素id错误

似乎有效(我没有接收数据的url,但请求已发送)

HTML:

它使用jQuery 3.3.1;

I get
Uncaught TypeError:构造'FormData'失败:参数1不是'HTMLFormElement'类型。
从此
var form=$(“#someFormName”).serialize()中获取。因此,这不起作用..我得到
未捕获类型错误:构造“FormData”失败:参数1不是“HTMLFormElement”类型。
来自此
var form=$(“#someFormName”).serialize()。所以这不起作用。好吧,明显的问题是HTML中表单的id是“ChangePhotoForm”,而JavaScript中的表单id是“someFormName”。我在JS中替换了名称,但忘了在表单中这样做。所以身份证没问题,我查过了。我会编辑这篇文章。我会尝试使用
contentType:'multipart/form data'
。很明显,HTML中表单的id是“ChangePhotoForm”,而JavaScript中的表单id是“someFormName”。我在JS中替换了名称,但忘了在表单中这样做。所以身份证没问题,我查过了。我会编辑这篇文章。我会尝试使用
contentType:'multipart/formdata'
。是的,但我发现您使用的是不同版本的jQuery。若要重现此情况,必须使用3.3.1。首先,问题是如何使用jQuery3.3.1实现这一点,如果需要的话,我将在最后一个手段中更改版本。它必须是可能的想法,对吗?它使用3.3.1,检查我的编辑,我删除了代码中的jquery,不需要HM你是对的(不熟悉这个网站)。那么,我肯定出了点问题。搞不懂什么。。。我会稍后再看,看看是否有更新,也许我遗漏了什么。是的,你可以试着从我的示例开始(看看是否有效),然后调整它到你的代码中,看看它什么时候失败。Uf,现在有时间看一下,似乎有些包搞砸了,在开发中没有包含jquery。我不是一个人在做这件事,我也不认为这会是个问题。。。一旦我正确地包含它,它就可以正常工作了。是的,但我看到您使用的是不同版本的jQuery。若要重现此情况,必须使用3.3.1。首先,问题是如何使用jQuery3.3.1实现这一点,如果需要的话,我将在最后一个手段中更改版本。它必须是可能的想法,对吗?它使用3.3.1,检查我的编辑,我删除了代码中的jquery,不需要HM你是对的(不熟悉这个网站)。那么,我肯定出了点问题。搞不懂什么。。。我会稍后再看,看看是否有更新,也许我遗漏了什么。是的,你可以试着从我的示例开始(看看是否有效),然后调整它到你的代码中,看看它什么时候失败。Uf,现在有时间看一下,似乎有些包搞砸了,在开发中没有包含jquery。我不是一个人在做这件事,我也不认为这会是个问题。。。一旦我把它包括进去,它就可以正常工作了。
function changePhotoPOST() {
   var form = document.getElementById("ChangePhotoForm");
   var formData = new FormData(form);

   $.ajax({
      type: "POST",
      url: "myUrl",
      data: formData,
      processData: false,
      contentType: false,
      success: onSuccess,
      error: onFailed
   });
}

function onSuccess(response) {
   console.log("response", response);
}

function onFailed(response) {
   console.log("response", response);
}