我是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?
非常感谢:)
答案 0 :(得分:4)
选项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,将其作为data- attribute附加到链接,使用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
属性。
答案 1 :(得分:1)
如果我正确理解您的问题,您需要创建一个用Javascript下载内容的URL吗?
这是不可能的。 JS不能在服务器端工作,因此一旦将其加载到客户端(浏览器)中,就无法使用JS函数内的PHP代码创建URL。
但是,您可以在Yii中执行一个传递值并且它回显URL的操作,您使用Jquery(我认为是responseText)获取该URL并随时使用它。
答案 2 :(得分:1)
如果您使用POST
中的data
选项,也可以将文件名作为jQuery.ajax()
数据传递:
$('#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() {
}
});
});