Ajax запрос не отправляет данные через POST - PullRequest
1 голос
/ 08 января 2020

У меня есть следующая Javascript функция

http_post = function (url, data, success) {
    var json_data = JSON.stringify(data);

    return $.ajax({
        type: "POST",
        url: url,
        data: json_data,
        dataType: "json",
        contentType: "application/json;charset=utf-8",
        success: success,
        fail: function(sender, message, details) {
            console.log(sender, message, details);
        }
    });
}

Который я так называю

$('#teammate_search_input').keyup(delay(function (e) {
    var value = $(this).val();

    http_post("{{ \Path::href('roster', 'search_name') }}", {name: value}, function(data) {
        console.log(data);
    });

}, 500));

Который поражает этот PHP скрипт

if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
    $download = $this->model('download');
    $results = $download->search_teammate($_POST['name']);
    echo json_encode(['term' => $_POST['name'], 'results' => $results]);
}   

Что должно просто вытянуть список пользователей с именем, совпадающим с вводом. Это все работает нормально (я получаю ожидаемый ответ), за исключением того, что term всегда установлен на null, поэтому он возвращает список всех пользователей.

Результат :

{term: null, results: Array(5)}

Похоже, что данные не передаются по запросу.

То, что я пробовал:

  • Изменено {name: value} на {name: 'test'} (2-й параметр вызова функции)
  • Удалена строка var json_data и заменено data: json_data, на data: data

Почему мои данные не отправляются по запросу

1 Ответ

1 голос
/ 08 января 2020

Ваша конечная точка PHP настроена на прием JSON? Я не верю, что это так по умолчанию (при условии, что вы не используете серверную библиотеку или инфраструктуру).

Вместо этого вы можете отправлять данные в формате urlencoded. Для этого удалите contentType: "application/json;charset=utf-8", и используйте data: data, не вызывая JSON.stringify(), например:

let http_post = function(url, data, success) {
  return $.ajax({
    type: "POST",
    url: url,
    data: data,
    dataType: "json",
    success: success,
    fail: function(sender, message, details) {
      console.log(sender, message, details);
    }
  });
}

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

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