繁体   English   中英

Yii框架,将jquery参数传递到Yii :: app()-> createUrl('controller / action',array('param'=>'value')

[英]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(我认为是re​​sponseText)获得该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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM