URL Encode a string in jQuery for an AJAX request
我正在我的应用程序中实现Google的即时搜索。 我想在用户输入文本输入时触发HTTP请求。 我遇到的唯一问题是,当用户到达名字和姓氏之间的空格时,空间不会被编码为
1 2 3 4 5 | $("#search").keypress(function(){ var query ="{% url accounts.views.instasearch %}?q=" + $('#tags').val(); var options = {}; $("#results").html(ajax_load).load(query); }); |
尝试encodeURIComponent。
Encodes a Uniform Resource Identifier (URI) component by replacing each instance of certain characters by one, two, three, or four escape sequences representing the UTF-8 encoding of the character (will only be four escape sequences for characters composed of two"surrogate" characters).
例:
1 | var encoded = encodeURIComponent(str); |
encodeURIComponent对我来说很好。我们可以在ajax调用中给出这样的url。代码如下所示:
1 2 3 4 5 6 7 8 9 10 11 | $.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) { } }); |
更好的方法:
encodeURIComponent转义除以下字符以外的所有字符:
为了避免对服务器的意外请求,您应该对任何用户输入的参数调用encodeURIComponent,这些参数将作为URI的一部分传递。例如,用户可以为变量注释键入"Thyme& time = again"。不对此变量使用encodeURIComponent将再次给出comment = Thyme%20& time =。请注意,&符号和等号表示新的键和值对。因此,不是让POST注释键等于"Thyme& time = again",而是有两个POST键,一个等于"Thyme",另一个(时间)等于。
对于application / x-www-form-urlencoded(POST),根据http://www.w3.org/TR/html401/interac...m-content-type,空格将替换为'+',所以可能希望跟随encodeURIComponent替换,并使用"+"替换"%20"。
如果希望更加严格遵守RFC 3986(保留!,',(,)和*),即使这些字符没有正式的URI分隔用法,也可以安全地使用以下内容:
1 2 3 | function fixedEncodeURIComponent (str) { return encodeURIComponent(str).replace(/[!'()]/g, escape).replace(/\*/g,"%2A"); } |
我正在使用MVC3 / EntityFramework作为后端,前端通过jquery消耗我的所有项目控制器,直接发布(使用$ .post)不需要数据登录,当你直接传递除硬编码的URL以外的params。
我已经测试了几个字符,我甚至发送了一个URL(这个http://www.ihackforfun.eu/index.php?title=update-on-url-crazy&more=1&c=1&tb=1&pb = 1)作为参数并且完全没有问题,即使在URL中传递所有数据时,encodeURIComponent工作得很好(硬编码)
硬编码的URL即>
1 2 | 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
1 2 3 4 | 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) {.......}); |
试试这个
1 | var query ="{% url accounts.views.instasearch %}?q=" + $('#tags').val().replace(/ /g, '+'); |