Амперсанд конечной точки Node.js добавляется при вызове ajax

У меня есть приведенный ниже код, который я использую для достижения конечной точки node.js. Однако, когда он попадает, URL-адрес конечной точки добавляет к нему & вот так:

http://localhost:3004/expenses/?q=&12/02/2014

Следовательно, я не получаю желаемого результата.

Вот как выглядит мой код,

$('#myForm').on('submit', (e)=>{
    e.preventDefault();

    $.ajax({
        type: 'GET',
        url: 'http://localhost:3004/expenses/?q=',
        processData: false,
        data: $('#startDate').val(),
        contentType: 'application/json',
        success:(data, status)=>{
            // alert(status);
        },
        error:()=>{
            alert('problem');
        }
    })
})

Может кто-нибудь пролить свет?

1) Почему бы не добавить это к URL-адресу самостоятельно, если хотите processData: false? 2) Удалить тип контента. Вы не помещаете json в тело запроса.

Taplar 28.05.2019 15:10

В противном случае удалите ?q=, удалите processData и contentType, поставьте data:{ q: $('#startDate').val() } и на этом закончите.

Taplar 28.05.2019 15:11

Пробовал 1, 2 и последний комментарий, но не повезло. :(

David R 28.05.2019 15:17

Все, что мне нужно, это избавиться от & из => ?q=&12/02/2014, который автоматически добавляется.

David R 28.05.2019 15:18

Вы удалили data, contentType, processData и изменили url: 'http://localhost:3004/expenses/?q='+ $('#startDate').val(), и это не сработало?

Taplar 28.05.2019 15:18

Ага.. Последний делает свое дело!..

David R 28.05.2019 15:20

Проблема, скорее всего, связана с тем, что processData: false сообщает jQuery не форматировать данные для запроса. Учитывая, что это запрос GET, данные должны быть указаны в параметрах запроса. И поскольку в вашем URL уже есть ?, jQuery, вероятно, ожидает, что вы уже отформатировали данные как пары ключ-значение, поэтому он просто добавляет к ним &, чтобы они работали.

Taplar 28.05.2019 15:21

Понял @Taplar. Мне было интересно, как это было добавлено. Не могли бы вы опубликовать это как ответ. Я приму это.

David R 28.05.2019 15:23
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
8
29
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема, скорее всего, связана с тем, что processData: false сообщает jQuery не форматировать данные для запроса, а URL-адрес GET уже содержит ?. Учитывая, что вы не даете запрос json, я бы предложил сократить ваш вызов, чтобы упростить проблему.

$.ajax({
    type: 'GET',
    url: 'http://localhost:3004/expenses/',
    data: { q: $('#startDate').val() },
    success:(data, status)=>{
        // alert(status);
    },
    error:()=>{
        alert('problem');
    }
});

Если вы не укажете processData в параметрах, он преобразует данные, которые вы ему предоставите, в параметр запроса для запроса. Учитывая, что это запрос GET, он сгенерирует для вас ?q=<value>. И, как упоминалось в комментариях, вам не нужно contentType: application/json в параметрах, поскольку это говорит jQuery указать тип контента в запросе, чтобы сервер знал, что вы отправляете его json в теле. Которым ты не являешься :)

Другие вопросы по теме