我是yii的新手,我的一个视图中有这个脚本:
$('#div_exams').on('click', 'a[id^="download"]', function(e) {
e.preventDefault();
var fileName = e.target.id;
$.ajax({
type: "POST",
url: "<?php echo Yii::app()->createUrl("exams/downloadExam",array('fileName'=>'HERE I NEED TO PASS FILENAME')); ?>",
success: function(jsonResponse) {
},
error: function() {
}
});
});
所以我的问题是,如何在javascript中传递var fileName来在yii中创建url?
非常感谢:)
选项1:在Yii中构建一个URL模板,并将每个需要的文件名插入其中:
var baseUrl = <?php echo json_encode(Yii::app()->createUrl("exams/downloadExam",array('fileName'=>'__PLACEHOLDER__'))); ?>;
$('#div_exams').on('click', 'a[id^="download"]', function(e) {
...
var url = baseUrl.replace('__PLACEHOLDER__', encodeURIComponent(filename));
...
}
选项2,可能更干净:在Yii中构建每个URL,将其作为数据属性附加到链接上,使用JS:读取
// when building each download link:
<?php echo CHtml::link('Download link, 'some url', array(
'id' => 'download_1234',
'data-download' => Yii::app()->createUrl("exams/downloadExam",array('fileName'=>'the file')),
));
// in the script
$('#div_exams').on('click', 'a[id^="download"]', function(e) {
...
var url = $(this).data('download');
...
}
请注意,这两个解决方案都没有像您现在所做的那样滥用id
属性。
如果我正确理解您的问题,您需要创建一个URL来下载Javascript吗?
这是不可能的。JS在服务器端不起作用,所以一旦JS函数加载到客户端(浏览器)中,就不能在JS函数内使用PHP代码创建URL。
然而,您可以在Yii中执行一个操作,您传递一个值,它会返回一个URL,您可以使用Jquery(我认为是responseText)获得该URL,并随时使用它。
如果在jQuery.ajax()
:中使用data
选项,也可以将文件名作为POST
数据传递
$('#div_exams').on('click', 'a[id^="download"]', function(e) {
e.preventDefault();
var fileName = e.target.id;
$.ajax({
type: "POST",
url: "<?php echo Yii::app()->createUrl("exams/downloadExam"); ?>",
data: {fileName: fileName},
success: function(jsonResponse) {
},
error: function() {
}
});
});