Получение ошибки 403 Запрещено в Ajax CodeIgniter - PullRequest
0 голосов
/ 28 января 2020

Это мой модальный вид

<div id="edit_numbers" class="modal">
    <?php $attrs = array('id' => 'user_form'); ?>
    <?= form_open_multipart('users/editnumber', $attrs) ?>
        <div class="modal-content row">
            <h4 class="modal-title">Add/Edit User Number</h4>
            <div class="row">
                <div class="col s12">
                    <p>
                        <input class="with-gap" name="method" type="radio" id="method_manual_input" value="manual" checked>
                        <label for="method_manual_input">Manual Input</label>
                    </p>
                    <input type="hidden" id="numberCount" name="numberCount" value="1">
                    <div id="numberForm" class="row">
                    </div>
                </div>
            </div>
        </div>
        <div class="modal-footer">
            <input type="hidden" id="username" name="username" value="">
            <input type="hidden" id="user_id" name="id" value="">
            <button type="submit" class=" modal-action waves-effect waves-green btn-flat">Submit</button>
            <a href="#!" class=" modal-action modal-close waves-effect waves-green btn-flat">Cancel</a>
        </div>
    </form>
</div>

А это мой ajax

$("#edit_numbers").on('click', '.add-number', function() {

$('#numberCount').val( function(i, oldval) {
    return ++oldval;
});
var x = $(this).attr('data-number-id');
console.log(x);
var user_id = $("#number_" + x).val();
var user_username = $("#edit_numbers #username").val();

console.log(user_id + " " + user_username);
// do AJAX
$.ajax({
    url: base_url + "/number/add_number",
    data: {
        format: 'json',
        id: user_id,
        username: user_username
    },
    context: {
        id: $("#number_" + x).val()
    },
    dataType: 'json',
    error: function(err) {
        alert('An error occurred. Please try again later.');
        console.log(err);
    },
    success: function(data) {
        // body...
        console.log(data);
        if (data.status == 0) {
            alert(data.message);
        } else {
            var id = data.id;
            var new_x = parseInt(x) + 1;
            var inputGroupWrapper = numberAddBuilder(new_x, "");
            $("#numberForm").append(inputGroupWrapper);

            alert(data.message);
        }
    },
    type: 'POST'
});

return false; });

, а это мой контроллер

public function add_number()
{
    $json = array(
        'status'  => 1,
        'message' => 'success',
    );

    $this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean');
    $this->form_validation->set_rules('id', 'Account', 'trim|required|xss_clean');

    if (!$this->form_validation->run()) {
        $json['status'] = 0;
        $json['message'] = 'validation error';
    } else {
        $username = $this->input->post("username");
        $id = $this->input->post("id");

        $account_res = json_decode($this->number->add_number_to_user($username, $id, $this->session->userdata('logged_in')['token']), true);
        if (!isset($account_res)) {
            $json['status'] = -1;
            $json['message'] = 'server error';
        }
    }

    // set response
    echo json_encode($json);
}

Это мой form_helper , есть что-нибудь с этим или нет?

function form_open($action = '', $attributes = array(), $hidden = array())
{
    $CI =& get_instance();

    // If no action is provided then set to the current url
    if ( ! $action)
    {
        $action = $CI->config->site_url($CI->uri->uri_string());
    }
    // If an action is not a full URL then turn it into one
    elseif (strpos($action, '://') === FALSE)
    {
        $action = $CI->config->site_url($action);
    }

    $attributes = _attributes_to_string($attributes);

    if (stripos($attributes, 'method=') === FALSE)
    {
        $attributes .= ' method="post"';
    }

    if (stripos($attributes, 'accept-charset=') === FALSE)
    {
        $attributes .= ' accept-charset="'.strtolower(config_item('charset')).'"';
    }

    $form = '<form action="'.$action.'"'.$attributes.">\n";

    // Add CSRF field if enabled, but leave it out for GET requests and requests to external websites
    if ($CI->config->item('csrf_protection') === TRUE && strpos($action, $CI->config->base_url()) !== FALSE && ! stripos($form, 'method="get"'))
    {
        $hidden[$CI->security->get_csrf_token_name()] = $CI->security->get_csrf_hash();
    }

    if (is_array($hidden))
    {
        foreach ($hidden as $name => $value)
        {
            $form .= '<input type="hidden" name="'.$name.'" value="'.html_escape($value).'" style="display:none;" />'."\n";
        }
    }

    return $form;
}

Это вид и кнопка «+», которую я нажимаю Когда я нажимаю кнопку «+», я получаю сообщение об ошибке , Пожалуйста, попробуйте позже. и это говорит 403 запрещено. Я просто передаю токен csrf, но ничего не происходит. Когда дело доходит до успеха, я получаю новую ошибку после сбора данных, она говорит: «Обнаружена ошибка, запрошенное вами действие не разрешено». И становится анонимным в строке $ .. ajax. Я не знаю, что с этим делать.

...