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

时间:2013-06-23 03:11:53

标签: php javascript ajax yii

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

非常感谢:)

3 个答案:

答案 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(我认为是re​​sponseText)获取该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() {

        }
    });

});