未捕获的 ReferenceError:未定义 showCategory

Posted

技术标签:

【中文标题】未捕获的 ReferenceError:未定义 showCategory【英文标题】:Uncaught ReferenceError: showCategory is not defined 【发布时间】:2014-12-30 01:33:42 【问题描述】:

我定义了一个名为 showCategory 的函数。但是,由于某种原因,我的调试器告诉我显示类别未定义。并且不会加载/生成 JSON 页面。它还说“未捕获的类型错误:无法读取未定义的属性'替换'”

$.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

【问题讨论】:

您没有定义showCategory,而是传递了一个命名的匿名函数。因此,将showCategory 移到 ajax 上方(如果可能)并在 done 承诺中传递函数引用。 【参考方案1】:

在 AJAX 请求的 done 方法之外定义您的 showCategoryfunction,然后调用它。

 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();
        
      
  );

应该有帮助。

UPDdone 函数调用中稍微更改了我的答案。但是你仍然会得到一个错误,因为你忘了定义categoryData数组,或者我没有看到它的声明,所以请在cmets中告诉这个,所以,在声明arr的同时试试这个并告诉我结果.

【讨论】:

好的,我按照你说的做了。现在它打开了第三页,但仍然不会加载 JSON。 JS FIDDLE 错误控制台显示:未捕获的 ReferenceError: urlObj is not defined @iamalama 工作很忙,所以请阅读 upd 并告诉我结果。

以上是关于未捕获的 ReferenceError:未定义 showCategory的主要内容,如果未能解决你的问题,请参考以下文章

未捕获的 ReferenceError:未定义 showCategory

未捕获的 ReferenceError:“$ 未定义”[重复]

PhoneGap 错误 - “未捕获的 ReferenceError:cordova 未定义”

未捕获的 ReferenceError:$ 未定义 [重复]

未捕获的 ReferenceError:未定义窗口

未捕获的 ReferenceError:未定义 url