我有一个c#.net MVC应用程序。我正在使用jQuery UI自动完成。我创建了一个有效的JSON字符串来发送到自动完成,并将其添加到视图中,如下所示:
$(document).ready(function() {
autoCompleteParams[@Model.Id] = jQuery.parseJSON(@Html.Raw(Json.Encode(Model.ParamValueListJson)));
// Handles onchange for autocomplete
$reports.initParamList('@Model.Id');
});
当我检查ParamValueListJson
的值并通过JSON
验证运行它时,它是一个有效的字符串。但是,它很长。粘贴到Word时,它是98页和424,638个字符(包括空格)。
当我看到返回视图的html专门检查结果值时,我可以看到字符数减少到31,424。因为它被截断,JSON
无效,我收到错误“Uncaught Syntax Error:Unexpected String”
如果我限制返回的记录,那么它全部再次起作用。但是,我做不到。我需要所有值作为选项。
处理此问题的最佳方法是什么?我可以确保将完整的JSON
字符串返回到视图吗?是否有另一种方法为自动完成创建对象?或者,我是否需要人为地限制JSON
的长度,然后将结果合并到视图中?
对此有任何帮助表示赞赏。到目前为止,谷歌搜索一直没有用。
我只是看得更近一点,现在看到完整的字符串传递给视图。 AJAX调用中返回的数据具有完整字符串。但是,当它执行jQuery.parseJSON
时,它就会被截断。
删除其中一个值字符串中找到的"
后,一切都按预期工作。显然字符串没有被截断,只是开发人员工具中可见的data
参数没有显示完整的字符串。
答案 0 :(得分:1)
您无法一次显示数千条记录。没有理由返回数千人。只需让autocomplete自己进行ajax调用,就像jQuery UI网站上的demonstrated一样。
确保您的服务器端ajax端点将结果集过滤到合理的位置。比如说20-25条记录。
一些提示:您的MVC控制器方法将要返回JsonResult而不是View。 另外,请务必将JsonResult设置为允许HttpGet(作为JsonResult对象的属性):
像这样(VB,但你可以弄明白):
$('#txtSearchTerms').autocomplete({
source: function (request, response) {
$.ajax({
url: '@Context.Request.Url.Scheme://@Context.Request.Url.Host:@Context.Request.Url.Port/Ajax/ProductSearch/' + $('#txtSearchTerms').val(),
dataType: 'json',
data: {},
success: function (data) {
response($.map(data, function (item) {
return {
label: iitem.Name,
value: item.ProductID,
id: item.ProductID
}
})) // response
} // success
}) // ajax
} // source function
});
<HttpGet>
Public Function ProductSearch(term As String) As JsonResult
Dim payload As SomeModel = Nothing
Using database As WebDataContext = New WebDataContext
database.Configuration.CreateProxies = False
payload = (From p In database.Products Where p.Name.Trim.ToLower.StartsWith(term.Trim.ToLower) Select p).Take(25).ToList
End Using
Return New JsonResult With {.Data = payload, .JsonRequestBehavior = JsonRequestBehavior.AllowGet}
End Function
答案 1 :(得分:1)
你是否应该有一个长或不长的字符串是一个很好的问题(你应该回答一个问题),但是一个单独的主题。
根据我的经验,如果您收到“未捕获的语法错误:意外的字符串”错误,则字符串中会有一些未转义的字符导致其失败(例如'“;:)。
鉴于较短的字符串有效,也许它是带有无效字符的完整结果末尾的记录之一。
您看到的截断可能只是您在浏览器中访问字符串的结果,而不是对JSON字符串大小的限制。鉴于您的最后一个UPDATE是完整的字符串,我推测发送给解析器的字符串不会被截断。
我建议您仔细查看完整字符串并检查值中未转义的字符。