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

时间:2018-06-21 10:15:26

标签: javascript yii2

我正在尝试在yii2项目中调用JS函数,但未定义函数, JS函数位于一个名为main.js的文件内,该文件包含在首页的布局中,并且在站点/索引中还有另一个内部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文件中的其他代码可以从需要从外部源调用的函数中使用 我将如何解决此问题,对您的帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

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

尝试«希望对您有帮助»

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

如果不完全是这样,但是该函数可能放置在调用之后,因此它将是未定义的,因此请确保该函数在调用之前呈现。