2013-06-23 48 views
1

我在YII新和我在一個此腳本我的觀點:Yii框架,通jquery的參數代入的Yii ::應用程序() - > createUrl( '控制器/動作',陣列( 'PARAM'=> '值')

$('#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中的變種文件名創建警予的URL

非常感謝你:)

回答

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,可能是清潔:建立每個URL Yii中,將其連接到鏈接作爲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

謝謝你這麼多@DCoder,它正常工作與替換功能。 –

1

如果我理解你的正確的問題,您需要爲下載東西的JavaScript創建一個URL?

這是不可能的。 JS無法正常工作的服務器端,所以你不能創建使用JS功能,一旦其在客戶端(瀏覽器)加載內PHP代碼的URL。

然而,你可以在Yii中,你傳遞一個值的動作和它相呼應的URL,你得到的網址與jQuery(responseText的我認爲),只要你想使用它。

+0

謝謝您的回答,我就是這麼做的,但最後我用js funcion更換。 –

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() { 

     } 
    }); 

}); 
+0

是的,你是對的,但我做了一個API,所以我需要在這樣的URL該參數的「http://.../exams/downloadExam/exam1.pdf」。最後我用js中的用戶替換函數 –