Проблема Javascript encodeURIComponent при перенаправлении

У меня окно поиска работает с jquery и php, когда вы что-то вводите в это окно поиска, jquery подготавливает запрос и перенаправляет местоположение. Подготовка части запроса работает хорошо, но часть перенаправления имеет проблему с закодированным запросом. Страница автоматически декодирует закодированный запрос перед перенаправлением.

Если вы введете «test1 test2 test3» в поле поиска, он успешно кодирует запрос для test1%20test2%20test3 с помощью encodeURIComponent().

Теперь страница будет перенаправляться на result.php+query. Моя проблема в том, что страница переходит на result.php?q=test1 test2 test3 вместо result.php?q=test1%20test2%20test3.

вот коды

 if($("#searchbox").val() != "")
 {
    var mq1 = encodeURIComponent($("#searchbox").val());
    var query = "q="+mq1;

 }

 alert(query);
 if(query!="")
 location = "result.php?"+query;

результат предупреждения: q=test1%20test2%20test3, но он идет result.php?q=test1 test2 test3

edit: если я использую функцию encodeURIComponent с кодами перенаправления, она работает хорошо.

 alert(query);
 if(query!="")
 location = "result.php?"+encodeURIComponentquery);

эти коды работают, но они также кодируют часть q=.


person Malixxl    schedule 07.06.2012    source источник


Ответы (4)


Поскольку вы используете jQuery, почему бы просто не написать это:

if ($("#searchbox").val()) {
    location = 'result.php?' + $.param({
        q: $("#searchbox").val()
    });
}
person Ja͢ck    schedule 07.06.2012

Я думаю, может быть, это просто браузер показывает test1 test2 test3 в адресной строке, но сервер получает правильное значение. Вы можете проверить это с помощью инструментов разработчика браузера, таких как firebug, или даже проверить это на сервере.

person Jeffrey Zhao    schedule 07.06.2012
comment
Я немного меняю коды, чтобы проверить это. Редактирую вопрос сейчас. Смотрите редактирование, пожалуйста. - person Malixxl; 07.06.2012

Почему бы не изменить его на result.php?q=+encodeURIComponent(query)

person Steve    schedule 07.06.2012

Вот вариант того, что вы написали - он ожидает нажатия клавиши ввода после ввода вашего запроса (поскольку я не был уверен в контексте вашего кода, находится ли он в методе отправки для формы):

$('#searchbox').keypress(function(e) {
   if(e.which == 13 && $(this) {
       $(this).blur();
       var mq1 = encodeURIComponent($(this).val());
       var query = "q="+mq1;
       window.location = "result.php?"+ query;
   }
});

Используя это, он создает следующий URL:

result.php?q=multiple%20words%20in%20the%20url%20work%20fine

Я думаю, что ваш код был почти готов, но логика, связанная с оператором IF, вызывала проблемы.

person James Healey    schedule 07.06.2012