2014-11-03 8 views
0

showCategory라는 함수를 정의했습니다. 그러나, 어떤 이유로 내 디버거가 show category가 정의되지 않았다고 말하고 있습니다. 그리고 JSON 페이지를로드/생성하지 않습니다. 또한 그것은 "catch되지 않는 형식 오류 : 정의되지 않은의 '대체'속성을 읽을 수 없습니다"라고 나는 일도을 시도했지만 작동하지 않습니다잡히지 않은 ReferenceError : showCategory가 정의되지 않았습니다.

$.ajax({ 
type: 'GET', 
url: 'http://jsonstub.com/bike/1', 
contentType: 'application/json', 
beforeSend: function (request) { 
    request.setRequestHeader('JsonStub-User-Key', '50caee73-c7ed-43b7-912a-7fd6fcdbfd91'); 
    request.setRequestHeader('JsonStub-Project-Key', '54fb5790-b2cc-432f-88ee-7d3596b700bd'); 
} 
}).done(function showCategory(urlObj, options) 
{ 
    var categoryName = urlObj.hash.replace(/.*category=/, ""), 
    category = categoryData[ categoryName ],  
    pageSelector = urlObj.hash.replace(/\?.*$/, ""); 

if (category) { 
    var $page = $(pageSelector), 
     $header = $page.children(":jqmData(role=header)"), 
     $content = $page.children(":jqmData(role=content)"), 
     markup = "<p>" + category.description + "</p><ol>",  
     content = "<p>" + category.content + "</p>", 
     image = "<div class='image'><img src='" + category.picUrl + "'></img></div>" , 
     cItems = category.items, 
     numItems = cItems.length; 



    for (var i = 0; i < numItems; i++) { 
     markup += "<li>" + cItems[i].name + "</li>"; 
    } 
    markup += "</ol>"; 


    $header.find("h3").html(category.name); 
    $content.html(markup + content + image); 
    $page.page(); 
    $content.find(":jqmData(role=listview)").listview(); 
    options.dataUrl = urlObj.href; 
    $.mobile.changePage($page, options); 



} 
}) 


$(document).bind("pagebeforechange", function(e, data) { 
if (typeof data.toPage === "string") { 
    var u = $.mobile.path.parseUrl(data.toPage), 
     re = /^#category-item/; 
    if (u.hash.search(re) !== -1) {   
     showCategory(u, data.options); 
     e.preventDefault(); 

    } 
} 
}); 

. 어떤 아이디어가 잘못 됐나요?

DEMO JSFIDDLE

+1

당신은'showCategory'를 정의하지 않고 대신 익명의 명명 된 함수를 전달합니다. 따라서'showCategory'를 아약스 (가능한 경우) 위로 옮기고 완료된 약속에 함수 참조를 전달하십시오. – A1rPun

답변

0

는 AJAX 요청의 done 방법의 외부에서 showCategory 함수를 정의하고 호출.

function showCategory(args){ 
    //stuff 
} 
$.ajax({ 
    //ajax stuff 
}).done(function(data){showCategory(argsTakenFromData)}) 

$(document).bind("pagebeforechange", function(e, data) { 
    if (typeof data.toPage === "string") { 
     var u = $.mobile.path.parseUrl(data.toPage), 
     re = /^#category-item/; 
     if (u.hash.search(re) !== -1) {   
     showCategory(u, data.options); 
      e.preventDefault(); 
     } 
     } 
    }); 

도움이 될 것입니다.

UPD 내 대답이 약간 변경되어 done 함수 호출이 변경되었습니다. 그래도 여전히 오류가 발생합니다. categoryData 배열을 정의하는 것을 잊었거나 선언이 표시되지 않습니다. 따라서 주석에이 사실을 알려주십시오. 따라서 arr을 선언하고 결과를 알려주십시오.

+0

좋아요, 당신이 말한대로 했어요. 이제 세 번째 페이지가 열리지 만 여전히 JSON이로드되지 않습니다. [JS FIDDLE] (http://jsfiddle.net/mariellel/h6yrdnfo/4/) 오류 콘솔에 다음과 같이 표시됩니다. Uncaught ReferenceError : urlObj가 정의되지 않았습니다. – iamalama

+0

단서가 없습니까? :(무덤 – iamalama

+0

@iamalama 직장에서 바빴다. 그래서 upd를 읽고 나에게 결과를 말해라. –

관련 문제