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) {.......});