我有一个文本输入,我用它来通过 JS 传递值,以使用 OData 查询参数从 JSON 文件中获取名称的过滤数据。
如果某人的名字中有撇号,我在传递 URL 时会收到一个错误的请求。
我知道撇号应该通过双引号来转义。我已经尝试过这个,虽然请求没有中断,但它会用两个与数据不匹配的撇号传递(导致没有结果)。
下面是我的代码的高级内容:
杰伦
{
"value": [{
"Title": "John O'Smith"
}]
}
.HTML
<input type="text" value="John O'Smith" />
<button>Search</button>
.JS
var term = $('input').val();
var searchTerm = term.replace(/'/g, "''");
var serviceURL = "/api/service?&$filter=contains(Title,'" + searchTerm + "')";
$('button').on('click', function(){
$.get( serviceURL, function( data ) {
// Code to display filtered JSON data
});
});
当我通过 AJAX 传递上述serviceURL
时,URL 将显示为:
/api/service?&$filter=contains(Title,'John O''Smith')
该请求有效,但它带有两个与我的 JSON 对象不匹配的撇号。
如果我按原样传递它 - 没有替换 - 我会得到一个Bad Request
.
我也尝试通过其他传统方法("\",编码 uriComponent)转义它
知道我做错了什么或如何解决这个问题吗?
更新
不幸的是,似乎有一个单独的问题或它被大量缓存,因为上面的所有内容现在都按预期工作。
名称中有一个空格,因此您需要在撇号加倍后对其进行编码:
var term = "John O'Smith";
var searchTerm = encodeURIComponent(term.replace(/'/g, "''"));
var serviceURL = "/api/service?&$filter=contains(Title,'" + searchTerm + "')";
这将产生:
/api/service?&$filter=contains(Title,'John%20O''Smith')
尝试将每个单引号换成双引号,反之亦然。
或者,您可以将字符串的javascripts concat()方法链接在一起。文档在这里: concat()