jQuery $ .post - мне нужно кодировать параметр URL? - PullRequest
11 голосов
/ 09 марта 2011

Я звоню AJAX с $.post(url, cb).URL, который я передаю, может содержать странные символы, такие как пробелы, &, ? и т. Д.

Нужно ли использовать $.post(encodeURIComponent(url), cb)?

urlэто что-то вроде /foo/weird-char§.

Ответы [ 3 ]

13 голосов
/ 09 марта 2011

Нужно ли использовать $ .post (encodeURIComponent (url), cb)?

Вам придется использовать encodeURIComponent(), но не для всего URI, только для части данных (weird и chars в вашем примере).URL-адрес и ? &, разделяющие параметры, должны оставаться неизменными.Если вы закодируете весь URI, он станет непригодным для использования.

Если вы добавите данные в виде данных POST, используя параметр data:

url = "/foo/possible";
$.post(url, { "weird": "f2(90§§$", "chars": "ß1028490" });

Ajax-функции jQuery позаботятся оURL кодирует данные автоматически.

1 голос
/ 09 марта 2011

Да, вам необходимо закодировать ключи и значения в строке запроса (но не ?, который отделяет путь от аргументов запроса, и &, который разделяет аргументы запроса).Это встроено в jQuery, если вы используете параметр данных $.post, например:

$.post(url, { name: "John", time: "2pm" }, cb);
0 голосов
/ 12 июня 2013

Я использую 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, т.е.>

 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, а вместо этого попробуйте передать параметры внутри метода ajax post

 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) {.......});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...