2016-09-19 18 views
10

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(/&lt;/g, "<").replace(/&gt;/g, ">"); 
    } else { 
     desc = ""; 
    } 
    var typeArr = []; 
    type = type.replace(/&amp;/, "&"); 

    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, "&#39;"), 
     'formlink': formLink.split(",")[0].replace(/\'/g, "&#39;"), 
     '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 />"); 

     }); 
    } 
+3

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ó –

+0

Đồ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. –

+0

@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

Trả lời

10

Trên dòng 155, bạn đẩy json ngay cả khi nó không được xác định.

if (pubType=="eForm" || pubType=="PDF") { 
    var json = createJSONStructure(title, desc, index, type.toLowerCase(), formLink, documentLink, pubType, processId, ministry, ca, stax, btax, letax); 
} 
formItems.push(json); 

Và sau khi bạn đang cố gắng lấy item.processid không xác định. Bạn có thể xác định các biến trong if-block, nhưng trong trường hợp bạn nên thêm một số xác nhận.

$.each(formItems, function(i, item) { 
    var link; 
    count = count + 1; 

    if (item == null) { 
     return; 
    } 

    //add links to parent container 
    if (item.processid !== "0") 
    ... 
}); 
+0

Tôi không biết Brian đang làm gì, hoặc tại sao anh ta không đánh dấu câu trả lời này đúng, đây là một vấn đề bức xúc vào thời điểm đó. Đây rõ ràng là câu trả lời đúng (chỉ). – TylerY86

Các vấn đề liên quan