繁体   English   中英

从外部文件调用JS函数在yii2中给出错误

[英]Calling JS function from external file give error in yii2

我正在尝试在yii2项目中调用JS函数,但未定义函数,该JS函数位于名为main.js的文件内,该文件包含在首页的布局中,并且在site / index中具有另一个内部JS调用main.js文件中的函数的代码。 如果我将此功能放在站点/索引中,那么一切都按预期运行,但是如果我将其从外部调用以进行调用,则表示功能未定义。

我的操作页面网站/索引:

<?php
 $getcatUrl = Yii::$app->UrlManager->createUrl(['site/getcategories']);

$script = <<< JS

 $(document).ready(function(){

       $(".sideBarNav").mouseenter(function(){
          id = $(this).attr('href');
          getCategories(id);
           $('.cat-container').css('display', 'block');
       });
  });
JS;
$this->registerJs($script);
?>

现在在我的主要JS文件中,我有以下内容:

  function getCategories(id){
           $.ajax({
                        url: '{$getcatUrl}',
            type: 'POST',
            data: {category_id: id},
            success: function (data) { 
                         data = jQuery.parseJSON(data);
                         //console.log(data); return;
                      if (data.length > 0) {
                        $("#dl-cat").html("");
                        var content = $("#dl-cat");
                        firstdata = data[0];
                        secdata = data[1];

                        for (var i = 0; i < firstdata.length; i++) {
                         // var d =  $( document.createElement('dl') );
                          var dl = $("<dl></dl>");
                          dl.append("<a href='"+firstdata[i].id+"'><dt>"+firstdata[i].name+"</dt></a>");

                              for (var j = 0; j < secdata.length; j++) {
                            if (secdata[i][j] !== undefined) {
                              dl.append("<dd><a href = '"+secdata[i][j].id+"'>"+secdata[i][j].name+"</a></dd>");
                            }

                          }
                        content.append(dl);
                        }

                      } else {
                        console.log('no item for this categories');
                      }
                   },
                error: function(jqXHR, errMsg) {
                 // handle error
                    console.log(errMsg);
                }
            });
       }

请注意,JS文件中的其他代码可以从需要从外部源调用的函数中获得预期效果。我该如何解决此问题,对您的帮助将不胜感激。

我敢打赌,脚本在所有jquery之前,因此该功能“消失了”。 尝试将脚本放置在外部文件中,并确保

尝试«我希望对您有帮助»

    $this->registerJsFile(
        '@web/js/your_file.js',
        ['depends' => [\yii\web\JqueryAsset::class]]
    );

如果不是完全正确,但可能是函数被放置在调用之后,因此它将是未定义的,因此请尝试确保函数在调用之前被渲染。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM