Intercooler JS неправильно отправляет данные формы в Safari - PullRequest
0 голосов
/ 16 ноября 2018

Я занимаюсь разработкой веб-приложения для социальных сетей, и до сих пор все отлично работало на Chrome и Firefox.Недавно я обнаружил ошибку в Safari (как для iOS, так и для macOS), из-за которой данные формы отправляются неправильно, когда я отправляю запрос AJAX с использованием интеркулера JS.

Проблема была обнаружена впервые, когда я понял, что Safari не разрешает принимать запросы на добавление в друзья, когда люди отвечают из их области уведомлений.Вот соответствующий HTML-код, когда люди принимают / отклоняют запрос о дружбе из своих уведомлений

<form method="post" ic-post-to="{% url 'respond-request' item.sender.pk %}">
    {% csrf_token %}
    <button name="accept" type="submit">Accept</button>
    <button name="decline" type="submit">Decline</button>
</form>

В моем Django View я делаю две две вещи, когда кто-то отвечает на запрос о дружбе:

  1. Полностью удалите уведомление / запрос на добавление в друзья
  2. Добавьте пользователей в друзья, если и только если accept в request.POST

Это соответствующий код

# Remove notification
notification = Notification.objects.get(receiver=request.user, sender=userProfile, action="friend_request_received")
notification.delete()

# Remove the request
request.user.friend_requests_received.remove(userProfile)

# If yes, then add to friends and remove from request
if 'accept' in request.POST:
    request.user.friends.add(userProfile)

Работает так, как задумано в Chrome и Firefox.Когда кто-то нажимает accept в приведенном выше HTML-коде, пользователи становятся друзьями.Когда они нажимают decline, запрос удаляется, и они не становятся друзьями.

Странно то, что если в Safari используется вышеуказанный HTML, запрос удаляется, но пользователи не становятся друзьями.,Я напечатал request.POST в Django и могу подтвердить, что данные POST отправляются так, как я ожидаю от Chrome, но не от Safari. Safari просто не включает accept или какие-либо данные формы вообще в запрос AJAX, отправляемый через интеркулер, поэтому оператор if в моем коде выше никогда не срабатывает.

Это простоошибка с Intercooler?В разных статьях я видел людей, которые говорили об использовании jQuery для изменения вызова AJAX определенными способами, но я не смог найти ничего, связанного с использованием Intercooler.Есть ли способ достичь того, чего я хочу в Safari, используя только Intercooler и AJAX?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...