jQuery $ .post - 我必须编码URL参数吗?

时间:2011-03-09 10:00:32

标签: url jquery

我正在与$.post(url, cb)进行AJAX通话。我传入的网址可能包含空格,&?等奇怪的字符。

我必须使用$.post(encodeURIComponent(url), cb)吗?

url类似/foo/weird-char§

3 个答案:

答案 0 :(得分:13)

  

我是否必须使用$ .post(encodeURIComponent(url),cb)?

必须在整个URI上使用encodeURIComponent(),仅在数据部分weird和{{1}上使用在你的例子中)。 URL和分隔参数的chars必须保持不变。如果您对整个URI进行编码,它将变得无法使用。

如果要使用? &参数将数据添加为POST数据:

data

jQuery的Ajax函数将自动处理URL编码。

答案 1 :(得分:1)

是的,您需要对查询字符串中的键和值进行编码(但不是?,它将路径与查询参数和分隔查询参数的&分开。如果您使用$.post的数据参数,则内置于jQuery中,如下所示:

$.post(url, { name: "John", time: "2pm" }, cb);

答案 2 :(得分:0)

我正在使用MVC3 / EntityFramework作为后端,前端通过jquery消耗我的所有项目控制器,直接发布(使用$ .post)不需要数据编码,当你直接传递params而不是URL硬编码。 我已经测试了几个字符,我甚至发送了一个URL(这个http://www.ihackforfun.eu/index.php?title=update-on-url-crazy&more=1&c=1&tb=1&pb=1)作为参数,并且完全没有问题,即使在URL中传递所有数据时,encodeURIComponent工作得很好(硬编码)

硬编码网址,即>

 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方法中传递params

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