URL为AJAX请求编码一个jQuery字符串

我在我的应用程序中实现谷歌的即时搜索。我希望在用户输入文本时触发HTTP请求。我遇到的唯一问题是,当用户在名字和姓氏之间找到一个空格时,该空格没有被编码为+,从而破坏了搜索。我如何既可以替换空间与+,或只是安全URL编码字符串?

$("#search").keypress(function(){
var query = "{% url accounts.views.instasearch  %}?q=" + $('#tags').val();
var options = {};
$("#results").html(ajax_load).load(query);
});
477149 次浏览

试试这个

var query = "{% url accounts.views.instasearch  %}?q=" + $('#tags').val().replace(/ /g, '+');

encodeURIComponent试试。

对统一资源标识符(URI)组件进行编码,方法是用表示字符UTF-8编码的一个、两个、三个或四个转义序列替换特定字符的每个实例(对于由两个“;代理”组成的字符只有四个转义序列)。字符)。

例子:

var encoded = encodeURIComponent(str);

更好的办法:

encodeURIComponent转义除以下字符以外的所有字符

为了避免对服务器的意外请求,您应该对任何用户输入的参数调用encodeURIComponent,这些参数将作为URI的一部分传递。例如,用户可以输入“Thyme &time=again”作为变量评论。不对这个变量使用encodeURIComponent将返回comment=百里香%20&time=again。注意,&号和等号表示一个新的键和值对。所以不是有一个POST注释键等于“Thyme &time=again”,你有两个POST键,一个等于“Thyme”,另一个(time)等于再次。

对于application/x-www-form-urlencoded (POST),根据http://www.w3.org/TR/html401/interac...m-content-type,空格将被“+”替换,因此可能希望在encodeURIComponent替换之后,将“%20”替换为“+”。

如果您希望更严格地遵守RFC 3986(保留!,',(,)和*),即使这些字符没有正式的URI分隔用途,也可以安全地使用以下字符:

function fixedEncodeURIComponent (str) {
return encodeURIComponent(str).replace(/[!'()]/g, escape).replace(/\*/g, "%2A");
}

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

encodeURIComponent对我来说很好。我们可以在ajax call中给出这样的url。代码如下所示:

  $.ajax({
cache: false,
type: "POST",
url: "http://atandra.mivamerchantdev.com//mm5/json.mvc?Store_Code=ATA&Function=Module&Module_Code=thub_connector&Module_Function=THUB_Request",
data: "strChannelName=" + $('#txtupdstorename').val() + "&ServiceUrl=" + encodeURIComponent($('#txtupdserviceurl').val()),
dataType: "HTML",
success: function (data) {
},
error: function (xhr, ajaxOptions, thrownError) {
}
});
< p >使用jQuery.param()…< br > 描述:创建数组、普通对象或适合在URL查询字符串或Ajax请求中使用的jQuery对象的序列化表示。在传递jQuery对象的情况下,它应该包含带有名称/值属性的输入元素