2016-12-31 5 views
0

Я пытаюсь сделать вызов ajax, используя простой XMLHttpRequest() с помощью javascript XMLHttpRequest(), который имеет csrf и активирован регенерация. он работает только в том случае, если я собираю данные и токен из формы, иначе я получаю 403 (Запрещено). здесь не является JS:XMLHttpRequest() Запрос POST в codeigniter 3 403 (Запрещено) из-за защиты csrf

function test_ajax() { 
var ajax = new XMLHttpRequest(); 
    var data = {'csrf_test_name':csrfToken} ; 
ajax.addEventListener("load", completeHandler, false); 
ajax.addEventListener("error", errorHandler, false); 
ajax.addEventListener("abort", abortHandler, false); 
ajax.open("POST", base_url+'admin/test_ajax'); 
ajax.setRequestHeader('X-Requested-With', 'XMLHTTPRequest'); 
ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'); 
ajax.setRequestHeader('csrf_test_name', csrfToken); 
ajax.responseType = "json"; 
ajax.send(data); 

function completeHandler() { 
    console.log(event.target.response); 
} 
function errorHandler() { 
} 
function abortHandler() { 
} 
} 

и вот контроллер в CodeIgniter:

class Admin extends CI_Controller{ 
public function __construct(){ 
    parent::__construct(); 
    $this->load->library('session'); 
    $this->load->helper('url_helper'); 
    $this->load->helper('security'); 
    $this->load->helper('cookie'); 
} 
public function test_ajax(){ 
    $x = array('test1','test2'); 
    echo json_encode($x); 
    //var_dump($x); 
} 
} 

Так что я пытался добавить маркер в заголовке также в данных, подлежащих передаче, ни работы не даже с первого звонка. Я бы предпочел решение, чтобы оно работало, включив токен в данные и не в заголовке, если это возможно (в некоторых браузерах есть проблемы с настройками заголовков). Пожалуйста, нет jQuery решений, мне нужен этот, чтобы работать, используя простой javascript. Спасибо заранее.

ответ

1

Я нашел решение, возможно, это поможет кому-то, что данные, посылаемые к контроллеру необходимо сериализовать в следующем формате:

var data = "csrf_test_name="+csrfToken; 
Смежные вопросы