jquery 1.7.1 - 查询字符串中的括号“(”引起的语法错误
Posted
技术标签:
【中文标题】jquery 1.7.1 - 查询字符串中的括号“(”引起的语法错误【英文标题】:jquery 1.7.1 - Syntax error caused by paranthese "(" in querystring 【发布时间】:2012-06-14 19:58:42 【问题描述】:在 MVC 视图中,我通过 ActionLink 将字符串值添加到查询字符串
<ul data-role="listview" data-inset="true">
<li data-role="list-divider">Select Item</li>
@foreach (var item in Model)
<li>@html.ActionLinkitem.Name, "Create", "Article", new idItem = item.Id, name = item.Name , null)</li>
</ul>
我正在使用 jQueryMobile 和 jQuery。结果是一个插入列表: http://jquerymobile.com/demos/1.1.0/docs/lists/lists-inset.html
当在浏览器中单击链接时,我收到 JScript 运行时错误:
语法错误,无法识别的表达式: data-url='/Article/Create?idItem=152&name=Semi%20Skimmed%20(Lowfat]')
我都试过了:
HttpUtility.UrlPathEncode(item.Name)
HttpUtility.UrlEncode(item.Name)
没有运气。
名称中没有“(”或任何其他特殊字符的元素运行良好。JScript 错误中的 ]' 字符似乎指向不成功的序列化 (json)。
数据库中的字符串是
“半脱脂(低脂)”
并且不包含]'部分。
【问题讨论】:
你指定了 1.7.1:你用最新的 jQuery 1.7.2 试过了吗?data-url
来自哪里?你在使用 jQuery 移动版吗?
@Spudley 不,这是个好主意。我会更新我的 jQuery 版本。
@DarinDimitrov 是正确的。我同时引用了 jQuery 和 jQueryMobile 库
【参考方案1】:
一个愚蠢的解决方法是:
-
将“(”和“)”替换为您确定唯一的特殊字符(或字符串)(并且不会被 urlEncode 破坏),例如“~1~”和“~2~” .
对字符串运行 Server.urlEncode 方法。
将“~1~”(或其他)替换为“(”,将“~2~”替换为“)”。
【讨论】:
是的,我考虑过类似的方法,甚至从查询字符串中删除了 name 属性,因为 id 就足够了。但我想知道在我实施解决方法之前,这是否是我可以实施的解决方案的已知问题 我只是进行了一个快速测试,并使用了与您的问题相似的值,并且一切正常。正如在 cmets 中发布的那样,data-url 来自哪里以及您在使用 jquery 做什么来导致此错误发生。 data-url 来自 jquerymobile 你能用生成数据 URL 的实际代码更新你的问题吗? Asp.net mvc 在控制器和视图之间的正常操作链接中正确处理括号,我的回答真的不相关。无论 jquery 发生了什么,都是您的错误所在。 数据 url 正在由 jqueryMobile 创建。我已经更新了问题,但我不知道在 jqueryMobile 中生成数据 url 的位置。作为一种解决方法,我在控制器方法中获取值,而不是仅仅从原始视图传递它们。以上是关于jquery 1.7.1 - 查询字符串中的括号“(”引起的语法错误的主要内容,如果未能解决你的问题,请参考以下文章
Laravel, jQuery - 在 Laravel 中验证后返回括号表示法(jQuery 中的点到括号表示法)
使用 jQuery 或 Javascript 获取括号内的字符串
JavaScript/jQuery 中括号中的代码块是啥意思? [复制]