我正在与$.post(url, cb)
进行AJAX通话。我传入的网址可能包含空格,&
,?
等奇怪的字符。
我必须使用$.post(encodeURIComponent(url), cb)
吗?
url
类似/foo/weird-char§
。
答案 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) {.......});