Ошибка 403 AJAX при втором вызове jquery - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть простая форма с полем выбора клиентов. Как только вы выбираете клиента, я звоню ajax, чтобы выбрать клиентов go и отобразить их под полем выбора, чтобы пользователь мог их увидеть. Это отлично работает. Запрос AJAX выглядит следующим образом:

$.ajax({
  url: '/clients/access_controls/<?php echo basename(__FILE__);?>',
  type: 'post',
  data: clientId,
  //dataType: 'application/json',
  //contentType: 'application/x-www-form-urlencoded',

  error: function(jqXhr, textStatus, errorMessage) {
    alert('ERROR MESSAGE: ' + errorMessage);
    return false;
  },

  success: function(d) {
    $(d.html).insertAfter(tab.find('table tr:eq(0)'));
    var func = d.responseScript;
    if ($.isFunction(eval(func))) {
      eval(func + '()');
    }
  }
});

Проблема в том, что после выбора другого клиента из списка вызов Ajax возвращает ошибку 403 FORBIDDEN. В чем может быть проблема? Что сбивает с толку, так это то, что первый звонок проходит нормально, так почему же он не работает во второй раз. Это очень простая проблема, но я не смог ее исправить. Я попытался установить различные типы содержимого с помощью запроса, а также попытался установить заголовки «Access-Control» в файле PHP, обрабатывающем запрос следующим образом:

header('Content-type: application/json');
//header('Access-Control-Allow-Headers', 'api-key,content-type');

header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Headers: X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method");
//header('content-type: application/x-www-form-urlencoded; charset=UTF-8');

, но безрезультатно. Любая помощь будет оценена. Заранее спасибо.

Вот php КОД

if (isset($_POST['request'])) {
  if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
    header('Content-type: application/json');
    //header('Access-Control-Allow-Headers', 'api-key,content-type');

    //header('Access-Control-Allow-Origin: *');
    //header("Access-Control-Allow-Headers: X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method");
    //header('content-type: application/x-www-form-urlencoded; charset=UTF-8');

}

switch ($_POST['request']) {
    case 'logos':
        if (!isset($_POST['sub'], $_POST['value'])) {
            echo json_encode([
                'error' => 'Invalid arguments'
            ]);
            exit;
        }

        $logo = getClientLogo($_POST['value']);
        $html = '<tr><td valign="top">Current Logo:</td><td valign="top" class="client_logo">' . ((!empty($logo)) ? $logo : '<strong>No Logo</strong>') . '</td></tr><tr><td>Upload new logo:</td><td><form method="post" enctype="multipart/form-data" target="member_image" action="/clients/access_controls/' . basename(__FILE__) . '"><input type="file" name="member_image" class="hidden" /><input type="button" value="Select File" data-usage="member_image" data-event="click" data-label="member_filename" />&nbsp;&nbsp;<span class="member_filename">No file selected</span>&nbsp;&nbsp;<input type="submit" value="Upload &amp; Save &gt;" /><input type="hidden" name="request" value="image_upload" /><input type="hidden" name="value" value="' . $_POST['value'] . '" /><input type="hidden" name="iil_token" value="' . getCSRFToken() . '" /></form><input name="member_image" style="display: none;" /></td></tr>';
        print json_encode([
            'html' => $html,
            'responseScript' => 'IIL.applyImageUploadRequirements'
        ]);
        exit;

1 Ответ

0 голосов
/ 13 февраля 2020

Если у вас есть Mod Security - попробуйте отключить его и посмотреть, работает ли он. Недавно у меня возникли проблемы с получением 403 ошибок из ajax вызова скрипта php - он дал бы 403, если бы в содержании содержалось слово «include». Отключение мод-безопасности заставило его работать, пока мы не нашли правило, которое было виновато.

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