我正在尝试在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文件中的其他代码可以从需要从外部源调用的函数中使用 我将如何解决此问题,对您的帮助将不胜感激
答案 0 :(得分:0)
我敢打赌,脚本在所有jquery之前,因此该功能“消失了”。尝试将脚本放置在外部文件中,并确保
尝试«希望对您有帮助»
$this->registerJsFile(
'@web/js/your_file.js',
['depends' => [\yii\web\JqueryAsset::class]]
);
如果不完全是这样,但是该函数可能放置在调用之后,因此它将是未定义的,因此请确保该函数在调用之前呈现。