[英]Yii framework, pass jquery parameters into Yii::app()->createUrl('controller/action',array('param'=>'value')
我是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,将其作为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
属性。
如果我正确理解了您的问题,则需要创建一个URL,以使用Javascript下载内容吗?
这是不可能的。 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() {
}
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.