JQuery $.post - мне нужно кодировать параметр URL?
Я делаю вызов AJAX с $.post(url, cb)
. URL-адрес, который я передаю, потенциально может иметь странные символы, такие как пробелы, &
, ?
и т.д.
Нужно ли использовать $.post(encodeURIComponent(url), cb)
?
url
- это что-то вроде /foo/weird-char§
.
Ответы
Ответ 1
Нужно ли использовать $.post(encodeURIComponent (url), cb)?
Вам нужно будет использовать encodeURIComponent()
, но не весь URI, только в части данных (weird
и chars
в вашем примере). URL и ? &
, разделяющие параметры, должны оставаться неизменными. Если вы кодируете весь URI, он станет непригодным.
Если вы добавите данные как данные POST с помощью параметра data
:
url = "/foo/possible";
$.post(url, { "weird": "f2(90§§$", "chars": "ß1028490" });
Функции jQuery Ajax будут заботиться о кодировании URL-адресов автоматически.
Ответ 2
Да, вам нужно будет закодировать ключи и значения в строке запроса (но не ?
, который отделяет путь от аргументов запроса и &
, который разделяет аргументы запроса). Это встроено в jQuery, если вы используете параметр данных $.post
, например:
$.post(url, { name: "John", time: "2pm" }, cb);
Ответ 3
Я использую MVC3/EntityFramework в качестве исходного кода, передняя часть потребляет все мои контроллеры проектов через jquery, отправляя напрямую (используя $.post), не требует указания данных, когда вы передаете параметры напрямую, кроме URL-адреса жёстко.
Я уже тестировал несколько символов, даже отправил URL-адрес (этот http://www.ihackforfun.eu/index.php?title=update-on-url-crazy&more=1&c=1&tb=1&pb=1) в качестве параметра и не имел проблемы вообще, хотя encodeURIComponent отлично работает когда вы передаете все данные внутри URL-адреса (жестко запрограммированного)
Жестко закодированный URL i.e. >
var encodedName = encodeURIComponent(name);
var url = "ControllerName/ActionName/" + encodedName + "/" + keyword + "/" + description + "/" + linkUrl + "/" + includeMetrics + "/" + typeTask + "/" + project + "/" + userCreated + "/" + userModified + "/" + status + "/" + parent;; // + name + "/" + keyword + "/" + description + "/" + linkUrl + "/" + includeMetrics + "/" + typeTask + "/" + project + "/" + userCreated + "/" + userModified + "/" + status + "/" + parent;
В противном случае не используйте encodeURIComponent и вместо этого попробуйте передать параметры в методе post ajax
var url = "ControllerName/ActionName/";
$.post(url,
{ name: nameVal, fkKeyword: keyword, description: descriptionVal, linkUrl: linkUrlVal, includeMetrics: includeMetricsVal, FKTypeTask: typeTask, FKProject: project, FKUserCreated: userCreated, FKUserModified: userModified, FKStatus: status, FKParent: parent },
function (data) {.......});