Я пытаюсь разобрать JSON при ошибке:
SyntaxError: Unexpected token u in JSON at position 0(…) eFormsAtoZIndex.aspx:6558
Полный код: http://pastebin.com/LXpJN8GF
Соответствующий код:
$(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);
}
}
}
Может ли кто-нибудь указать, что не так с структурой JSON или JS, или как я могу отлаживать элементы внутри него?
ИЗМЕНИТЬ (согласно ответам Jaromanda X и 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));
ERROR:
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
В строке:
if (item.processid !== "0")
В блоке:
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 />");
});
}