options.data.indexOf не является функцией при выполнении ajax POST - PullRequest
1 голос
/ 23 сентября 2019

Я получаю эту ошибку: Uncaught TypeError: options.data.indexOf is not a function.

Я искал решение и обнаружил, что это, вероятно, из-за версии 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?

Ответы [ 2 ]

0 голосов
/ 23 сентября 2019

Не уверен, что вы вставили точный код, который используете, но ваш идентификатор элемента неверен.

Эта скрипка , кажется, работает (у меня нет URL, который получаетданные, но запрос отправлен).

HTML:

<!DOCTYPE html>
<html>
<head>
    <title>Example</title>
</head>
<body>
    <form id="ChangePhotoForm">
      <input type="text" value="asdsa" name="Email" />
      <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> 
</body>
</html>    

JS:

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);
}

Используется jQuery 3.3.1;enter image description here

0 голосов
/ 23 сентября 2019

используйте данные формы, такие как:

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
   });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...