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 - 查询字符串中的括号“(”引起的语法错误的主要内容,如果未能解决你的问题,请参考以下文章

sql模糊查询

Laravel, jQuery - 在 Laravel 中验证后返回括号表示法(jQuery 中的点到括号表示法)

使用 jQuery 或 Javascript 获取括号内的字符串

JavaScript/jQuery 中括号中的代码块是啥意思? [复制]

Oracle SQL 获取括号中的最后一个字符串(也可能包含括号)

如何转义通过 JQuery ajax 函数发送的查询字符串中的特殊字符?