Tôi nhận được một lỗi khi cố gắng phân tích cú pháp JSON:Javascript - Phân tích cú pháp JSON trả về lỗi cú pháp
SyntaxError: Unexpected token u in JSON at position 0(…) eFormsAtoZIndex.aspx:6558
Full Code: http://pastebin.com/LXpJN8GF
Mã liên quan:
$(document).ready(function() {
var rebuild = getParameterByName("rebuild");
var createdStructures = $('#AtoZContentDiv').children().length;
if ((rebuild !== undefined && rebuild !== null && rebuild.indexOf("true") === 0) || (createdStructures === 0)) {
// clean up pre-existing data
cleanUp();
// create container structure
createFormLinkContainers();
// Call SP web services to retrieve the information and create the A to Z
retrieveListData();
completeInitialization();
} else {
try {
aggregateAll = jQuery.parseJSON($('#hdnAggregateAll').val());
console.log(jQuery.parseJSON($('#hdnAggregateAll').val()));
aggregatePersonal = jQuery.parseJSON($('#hdnAggregatePersonal').val());
aggregateBusiness = jQuery.parseJSON($('#hdnAggregateBusiness').val());
ministryAggregate = jQuery.parseJSON($('#hdnMinistryAggregate').val());
caAggregate = jQuery.parseJSON($('#hdnCAAggregate').val());
sTaxAggregate = jQuery.parseJSON($('#hdnSTaxAggregate').val());
bTaxAggregate = jQuery.parseJSON($('#hdnBTaxAggregate').val());
leTaxAggregate = jQuery.parseJSON($('#hdnLETaxAggregate').val());
} catch (err) {
console.log(err);
}
var type = getParameterByName("filter");
}
$("#tab-all").click(function() {
loadit('all');
});
$("#tab-business").click(function() {
loadit('business');
});
$(document).on('click', '#tab-personal', function(e) {
loadit('personal');
});
buildFilterMenu();
loadit('all');
});
function createJSONStructure(title, desc, index, type, formLink, documentLink, pubType, processId, ministry, ca, stax, btax, letax) {
if (desc !== undefined && desc !== null) {
desc = desc.replace(/</g, "<").replace(/>/g, ">");
} else {
desc = "";
}
var typeArr = [];
type = type.replace(/&/, "&");
var tempType = type.split("&");
for (i = 0; i < tempType.length; i++) {
typeArr.push(tempType[i].trim());
}
if (formLink === undefined || formLink === null || formLink.length === 0) {
formLink = "";
}
if (documentLink === undefined || documentLink === null || documentLink.length === 0) {
documentLink = "";
}
// subject, business and life event taxonomies must cater for multiple entries
var staxStructure = buildTaxonomyJSONStructure(stax, "stax");
var btaxStructure = buildTaxonomyJSONStructure(btax, "btax");
var letaxStructure = buildTaxonomyJSONStructure(letax, "letax");
var json = {
'name': title,
'desc': desc,
'type': typeArr,
'pubType': pubType,
'pdflink': documentLink.split(",")[0].replace(/\'/g, "'"),
'formlink': formLink.split(",")[0].replace(/\'/g, "'"),
'processid': processId,
'index': index,
'ministry': ministry.replace(/\,/g, " "),
'ca': ca.replace(/\,/g, " "),
'stax': staxStructure,
'btax': btaxStructure,
'letax': letaxStructure
};
return json;
}
function completeInitialization() {
if (checkDataLoaded()) {
// add the Navigation to the containers once all the data is inserted
addNavigationToContainers();
var type = getParameterByName("filter");
if (type == null || type.length == 0) {
type = "all";
}
loadit(type);
buildFilterMenu();
filter(type);
$('#hdnAggregateAll').val(stringify(aggregateAll));
console.log(aggregateAll);
$('#hdnAggregatePersonal').val(stringify(aggregatePersonal));
$('#hdnAggregateBusiness').val(stringify(aggregateBusiness));
$('#hdnMinistryAggregate').val(stringify(ministryAggregate));
$('#hdnCAAggregate').val(stringify(caAggregate));
$('#hdnSTaxAggregate').val(stringify(sTaxAggregate));
$('#hdnBTaxAggregate').val(stringify(bTaxAggregate));
$('#hdnLETaxAggregate').val(stringify(leTaxAggregate));
} else {
retryCount += 1;
// Check that the maximum retries have not been exceeded
if (retryCount <= maxRetries) {
setTimeout("completeInitialization();", 1000 * retryCount);
}
}
}
thể bất cứ ai chỉ ra những gì là sai với cấu trúc JSON hoặc JS hoặc làm thế nào tôi có thể gỡ lỗi các mục bên trong nó?
EDIT (Theo trả lời Jaromanda X và CH Buckingham):
$('#hdnAggregateAll').val(JSON.stringify(aggregateAll));
console.log(aggregateAll); $('#hdnAggregatePersonal').val(JSON.stringify(aggregatePersonal)); $('#hdnAggregateBusiness').val(JSON.stringify(aggregateBusiness)); $('#hdnMinistryAggregate').val(JSON.stringify(ministryAggregate));
$('#hdnCAAggregate').val(JSON.stringify(caAggregate));
$('#hdnSTaxAggregate').val(JSON.stringify(sTaxAggregate));
$('#hdnBTaxAggregate').val(JSON.stringify(bTaxAggregate));
$('#hdnLETaxAggregate').val(JSON.stringify(leTaxAggregate));
LỖI:
10:42:24.274 TypeError: item is undefined
createFormLinks/<()eformsAtoZIndex.aspx:5644
.each()jquery-1.11.1.min.js:2
createFormLinks()eformsAtoZIndex.aspx:5638
processResult()eformsAtoZIndex.aspx:5507
m.Callbacks/j()jquery-1.11.1.min.js:2
m.Callbacks/k.fireWith()jquery-1.11.1.min.js:2
x()jquery-1.11.1.min.js:4
.send/b()jquery-1.11.1.min.js:4
1eformsAtoZIndex.aspx:5644:1
On line:
if (item.processid !== "0")
Trong Block:
function createFormLinks(formItems, index)
{
// create all links on the page and add them to the AtoZContent div for now
var parentContainer = $("#AtoZContentDiv");
if (parentContainer === null)
{
// if it doesn't exist, we exist cause I can't reliably add a new control to the body and get the display
// location correct
return;
}
// sort form link array first
formItems = sortResults(formItems, 'name', true);
var count = 0;
$.each(formItems, function(i, item)
{
var link;
count = count + 1;
//add links to parent container
if (item.processid !== "0")
{
link = item.formlink;
}
else if (item.pdflink !== "")
{
link = item.pdflink;
}
var container = $("#AtoZContent-" + index);
var itemType = "all";
if (item.type !== null && item.type !== undefined && item.type.length === 1) itemType = item.type[0];
var str = "<div id='divFormLink-" + index + "-" + count + "' type='" + itemType + "' ";
if (item.name !== undefined && item.name !== null)
{
str = str + " ministry='" + stripPunctuation(item.ministry) + "' ";
str = str + " ca='" + stripPunctuation(item.ca) + "' ";
// now, we need to handle these differently since they can have multiple values
str = str + " stax='";
for (i = 0; i < item.stax.length; i++)
{
str = str + stripPunctuation(item.stax[i]);
}
str = str + "' ";
str = str + " btax='";
for(i = 0; i < item.btax.length; i++)
{
str = str + stripPunctuation(item.btax[i]);
}
str = str + "' ";
str = str + " letax='";
for(i = 0; i < item.letax.length; i++)
{
str = str + stripPunctuation(item.letax[i]);
}
str = str + "' ";
}
str = str + " index='" + index + "' style='word-wrap: break-word;'></div>";
container.append(str);
var innerDiv = $("#divFormLink-" + index + "-" + count);
appendIcon(innerDiv, item.pubType);
innerDiv.append("<a id='formLink-" + index + "-" + count + "' href='" + link + "'>" + item.name + "</a>");
innerDiv.append("<div id='formDesc-" + index + "-" + count + "'>" + item.desc + "</div><br />");
});
}
cho một điều, nếu null hoặc Số, hoặc Boolean hoặc Ngày hoặc bất kỳ thứ gì không phải là Đối tượng được chuyển đến hàm xâu chuỗi của bạn, nó trả về 'chưa xác định' - khi bị ép buộc một chuỗi sẽ cho bạn biết lỗi chính xác khi bạn cố phân tích cú pháp. Tại sao bạn làm phức tạp chức năng xâu chuỗi của bạn nếu nó được mong đợi trả về một chuỗi JSON? chỉ cần sử dụng JSON.stringify và được thực hiện với nó –
Đồng ý với Jaromanda X, loại bỏ chuỗi tùy chỉnh của bạn, sử dụng JSON.stringify. Xem vấn đề của bạn có biến mất không. –
@CHBuckingham Tôi gặp phải lỗi kiểu: 'TypeError: item is undefined'. Xem câu hỏi được cập nhật cho những thay đổi tôi đã thực hiện. – Brian