簡體   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