jQuery, Ajax, WP, длинный текст публикации 4000B: 404 не найден (2000B = OK)? - PullRequest
3 голосов
/ 15 ноября 2011

Это мой первый пост / тема здесь, я не был активным в форумах в течение некоторого времени, потому что, честно говоря, он мне не нужен, но этот только что получил меня.Я попробовал все, что было в моих знаниях - и я имею в виду все, я фанатичный тестер проб и ошибок.

Ситуация: jQuery, отправляет некоторые данные через Ajax, собранные в основном из $ ('# textarea')к файлу php на сервере.Если данные> X байт, я получаю 404 Not Found и страницу 404 Html в обработчике ошибок Ajax.В противном случае все идет гладко, и я получаю свои результаты.

Я должен указать, что я публикую в php-файл, который загружает wp-blog-header.php Wordpress, прежде чем выполнять вычисления, так как код должен быть частьюWPplugin.

  • Я пытался вернуть заголовок («HTTP / 1.1 200 OK»), как некоторые предлагали, учитывая, что WP изменил заголовок, чтобы не найти файл как часть системы, и это решилопроблема локально для некоторых случаев, но не удаленно.
  • Я попытался установить Content-Length в вызове ajax.
  • Я переключился между типом WP обработки вызовов Ajax и моим собственнымФайл .php в папке моего плагина.
  • Я чередовал вызовы wp-load.php, wp-config.php и wp-blog-header.php в начале моего файла ajax, и до сих порничего (некоторые проблемы решены локально, но не удаленно). Ничего не получалось.Единственное, что работает, это обрезка контента, отправляемого в файл .php.2000-2500B работает нормально, 3000 + B дают мне 404. Не найдено.

Что бы это могло быть?post_data_size 8M на сервере.Может ли это быть связано с SSL, как я видел в некоторых случаях?Это на стороне сервера?Пожалуйста, помогите,

PS Мой Javascript:

var data1 = {
    action: 'get-tables',
    html: $('#content').val(),
    nonce: kwd_settings.nonce
};
$.ajax({
    url: kwd_settings.ajax_url,
    type: 'POST',
    data: data1,
    scriptCharset: 'utf-8',
    timeout: 10000, /*10 seconds*/
    beforeSend: function( xhr ) {
        xhr.setRequestHeader("Content-length", $('#content').val().length+500);
        showProgress(true);
    },
    error: function (request, ajaxOptions, thrownError) {
        alert(request.statusText);
        alert(request.responseText);
        showProgress(false);
    },
    success: function( response ) {
        var r= response;
        showResponse(r);
    }
});

Ответы [ 3 ]

1 голос
/ 29 апреля 2017

Я знаю, что это старый вопрос, но так как не было никакого решения, и я буквально только нашел решение этого самого (заняло у меня целый день устранения неполадок), я решил, что это стоит опубликовать. Проблема заключалась в использовании по умолчанию опции «Фильтрация запросов» в IIS. Мне пришлось открыть экран «Фильтрация запросов» и нажать «Изменить параметр» (в правой части экрана) и изменить максимально допустимую длину содержимого, максимальную длину URL-адреса и максимальную длину строки запроса на величину, которая позволила бы сообщения. Затем я перезапустил IIS, и ошибка 404 прекратилась, и мои сообщения были завершены: -)

По какой-то причине я не смог найти этот ответ в Интернете.

0 голосов
/ 18 ноября 2011

Учитывая симптомы, которые вы описали в дальнейших комментариях:

  1. Простой обычный POST также не работает.
  2. Ошибка зависит от точного содержимого данных, а не от исходного размера.
  3. Строки, содержащие create, вызывают проблему, предлагая попытку предотвратить повреждение посредством внедрения SQL.

... Я бы выяснил, установлен ли на вашей хостинг-системе какой-то модуль безопасности, такой как mod_security или Suhosin . Пока что это наиболее вероятный подозреваемый.

0 голосов
/ 15 ноября 2011

Попробуйте установить:

xhr.setRequestHeader("Content-length", 0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...