1

我是 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?

非常感谢 :)

4

3 回答 3

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,将其作为数据属性附加到链接,使用 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像您现在所做的那样滥用该属性。

于 2013-06-23T04:04:18.947 回答
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() {

        }
    });

});
于 2013-06-23T08:48:45.010 回答
1

如果我正确理解您的问题,您需要创建一个 URL 以使用 Javascript 下载内容吗?

这是不可能的。JS 在服务器端不起作用,因此一旦将其加载到客户端(浏览器)中,您就无法在 JS 函数中使用 PHP 代码创建 URL。

但是,您可以在 Yii 中执行一个操作,即您传递一个值并回显一个 URL,您可以使用 Jquery(我认为是响应文本)获取该 URL,并随时使用它。

于 2013-06-23T03:35:52.343 回答