Форма отправки вызова JS / JQuery Ajax не удается только в Safari - PullRequest
0 голосов
/ 05 июня 2018

У меня есть контактная форма, которая обрабатывается через формы Google с помощью стандартного метода JQuery .ajax и перенаправляет на URL-адрес в случае успеха или неудачи.Он отлично работает везде, кроме браузера Safari (на всех платформах).Я погуглил и нашел много людей с проблемами отправки формы в Safari, но ни один из них не подходил именно для этой ситуации

Все браузеры / платформы возвращают статус 200 успеха, кроме Safari.Вместо успешной замены URL-адреса вы каждый раз получаете сообщение об ошибке 404.

Изменить / Дополнительная информация: Safari отключает параметры URL-адреса в URL-адресе запроса, в то время как все остальные браузеры этого не делают.то есть: http://example.com вместо http://example.com? спасибо .

Вот мой код с точными URL-адресами и удаленными именами полей формы Google.Любая помощь с тем, как заставить его работать в Safari, приветствуется.

function postToGoogleForms() {
  var name = $('#Name').val();
  var address = $('#Address').val();
  var city = $('#City').val();
  var state = $('#State').val();
  var zip = $('#Zip').val();
  var email = $('#Email').val();

  $.ajax({
    url: "(Google forms endpoint url here)",
    data: {
      "(Google forms input name here)":name,
      "(Google forms input name here)":address,
      "(Google forms input name here)":city,
      "(Google forms input name here)":state,
      "(Google forms input name here)":zip,
      "(Google forms input name here)":email
    },
    type:"POST",
    dataType:"xml",
    statusCode: {
      0: function () {
        window.location.replace("https://example.com?thank-you");
      },
      200: function () {
        window.location.replace("https://example.com?thank-you");
      }
    }
  });
}
</script>

<form onsubmit="return postToGoogleForms()" method="post">
<input type="text" placeholder="Name" name="Name" id="Name" required>
<input type="text" placeholder="Address" name="Address" id="Address" required>
<input type="text" placeholder="City" name="City" id="City" required>
<input type="text" placeholder="State" name="State" id="State" required>
<input type="text" placeholder="Zip Code" name="Zip" id="Zip" maxlength='10' required>
<input type="email" placeholder="Email" name="Email" id="Email" required>
<button type="submit" value="Submit">Submit</button>
</form>

1 Ответ

0 голосов
/ 08 июня 2018

Я исправил это.Safari нужно явно указать, чтобы не перезагружать страницу в конце вызова функции javascript onsubmit.Если вы этого не скажете, он просто перезагрузится после завершения функции.Все остальные браузеры умнее этого.Но не Safari.

Итак, я просто добавил 'return false' в конец функции.

Используя код из моего OP, это то, что он выглядит с добавленным логическим значением.

// Blah blah blah other stuff that's unimportant to the answer
$.ajax({
  url: "(Google forms endpoint url here)",
  data: {
    (blah blah blah...)
  },
  type:"POST",
  dataType:"xml",
  statusCode: {
    (blah blah blah...)
  }
});
return false // This is what fixed Safari's handling.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...