XMLHttpRequest возвращает ошибку 406 с сервера PHP в кодировке - PullRequest
0 голосов
/ 09 апреля 2020

Итак, у меня есть приложение, которое отлично работает на моем PHP 5.6 XAMPP-сервере. Долгое время go я перенес все на веб-сайт Host Gator, и я не помню, на какой версии PHP он работал, но он работал так, как ожидалось. Однако недавно произошли ошибки, и я отследил их, и виновником является ошибка 406 ответа XMLHttpRequest. Так что я могу отследить ошибку проще, я удалил лишние коды и просто оставил строки, которые будут воспроизводить ошибку. Host Gator в настоящее время работает только на версии 5.4 PHP.

Это мой код PHP ... По сути, это возвращает JSON ответ.

<?php
require 'sql.php';
require 'securitycheck.php';
$response = array();

try {

    //temporarily removed the codes that get the data sent by the client... Even with these removed, shouldn't cause errors...
    $response["code"] = 1;
    $response["message"] = "File Accepted";

    echo json_encode($response);

    //}
} catch (OAuthException $e) {
    echo $e->getMessage();
}
?>

Теперь это мой код на стороне клиента, который принимает ответ от сервера ...

  var ajax = new XMLHttpRequest();
  ajax = new XMLHttpRequest();
  ajax.open("POST",'ajax/savefile.php', false);
  ajax.setRequestHeader("Accept", "application/json");
  ajax.setRequestHeader('Content-Type', 'application/upload');
  ajax.setRequestHeader("Http-X-Requested-With", "XMLHttpRequest");
  ajax.setRequestHeader("Security-Key", securitykey);
  ajax.send("filename=" + savedname + "&filedata=" + JSON.stringify(canvas.toJSON()) + "&width=" + canvas.getWidth() + "&height=" + canvas.getHeight() + "&command=update");  

  if (ajax.status == 200){
    response = JSON.parse(ajax.responseText);
    if (response.code == 1){
      alertify.notify(response.message, 'success', 3);
    }else{
      alertify.notify(response.message, 'error', 3);
      closeEvent.cancel = true;
    }
  }

Он хорошо работает на моем сервере, но выдает ошибку на сервере HostGator. Кто-нибудь может помочь мне исправить эту ошибку? Как ответ не может быть принят HostGator в качестве сервера, когда он работает на моем XAMPP? Большое вам спасибо.

1 Ответ

0 голосов
/ 09 апреля 2020

A 406 ошибка означает:

сервер не может выдать ответ, соответствующий списку допустимых значений, определенных в заголовках согласования проактивного содержимого запроса

Вы сказали ajax.setRequestHeader("Accept", "application/json");, что принимаете только JSON ответов.

В предоставленном вами коде нет ничего, что могло бы проверить заголовок Accept и вывести 406, если ничего не найдено.

Откуда приходит чек, является загадкой, требующей дополнительной информации. Проверка документации и журналов вашего хоста, вероятно, будет хорошим началом.

Если бы я размышлял, то предположил бы, что что-то проверяет вывод вашего PHP сценария. Поскольку вы еще не сказали, что header("Content-Type: application/json"); PHP по умолчанию заявит, что выводит text/html.

HTML не JSON, так что вывод явно не приемлем для клиента .

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