尝试解析
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(",'processid': processId,'index': index,'ministry': ministry.replace(/\,/g," "),'ca': ca.replace(/\,'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));
错误:
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 />"); }); }
解决方法
在第155行,你推json,即使它是未定义.
if (pubType=="eForm" || pubType=="PDF") { var json = createJSONStructure(title,type.toLowerCase(),letax); } formItems.push(json);
之后,您尝试获取未定义的item.processid.
您可以在if-block中定义变量,但在这种情况下您应该添加一些验证.
$.each(formItems,item) { var link; count = count + 1; if (item == null) { return; } //add links to parent container if (item.processid !== "0") ... });