[英]Parse a long JSON string throws “Uncaught Syntax Error: Unexpected String”
我有一個ac#.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
無效,並且出現錯誤“未捕獲的語法錯誤:意外的字符串”
如果我限制返回的記錄,那么一切都會再次起作用。 但是,我做不到。 我需要所有值作為選項。
處理此問題的最佳方法是什么? 我可以確保將完整的JSON
字符串返回給視圖嗎? 還有另一種方法來創建自動完成的對象嗎? 或者,我是否需要人為地限制JSON
的長度,然后將結果合並到視圖中?
任何幫助,不勝感激。 到目前為止,谷歌搜索一直無濟於事。
我只是稍微靠近一點,現在看到完整的字符串正在傳遞給視圖。 AJAX調用中返回的數據具有完整的字符串。 但是,當它執行jQuery.parseJSON
時,即被截斷了。
除去在值字符串之一中找到的"
之后,所有功能均按預期工作。顯然該字符串並未被截斷,只是開發人員工具中可見的data
參數未顯示完整的字符串。
您一次不能顯示數千條記錄。 沒有理由退還數千。 只是讓自動完成讓Ajax調用自身,因為證明了jQuery UI網站。
確保您的服務器端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
是否應該使用長字符串是一個好問題(應該回答),但這是一個單獨的主題。
以我的經驗,如果您遇到“未捕獲的語法錯誤:意外的字符串”錯誤,則字符串中有一些未轉義的字符會導致失敗(例如'“;::)。
考慮到較短的字符串有效,它可能是帶有無效字符的完整結果結尾處的記錄之一。
您看到的截斷可能只是您在瀏覽器中訪問字符串的方式而已,而不是JSON字符串大小的限制。 鑒於您上一次的更新是完整的字符串存在,我推測發送到解析器的字符串不會被截斷。
我建議您仔細查看完整的字符串並檢查值中的未轉義字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.