在单独的JS文件中理解PHP代码

时间:2014-05-13 08:28:08

标签: php jquery ajax yii

$(".btn-delete-news").click(function() {
    if (!confirm('Are you sure to delete ?')) return false;
    var idNews = $(this).attr('news-info');

    console.log(idNews);
    $.ajax({
        url:"<?php echo Yii::app()->createUrl('/news/delete'); ?>",
        data: { id : idNews },
        type:"POST",
        success: function(data){
            if(data == "1") {
                window.location = "/news/";
            }
        }
    });
});

在脚本中,当我将该脚本插入查看文件时,它运行良好。 但我剪切它们,并将它们插入到js文件中,例如script.js =&gt;脚本运行错误,它不理解代码:url:"<?php echo Yii::app()->createUrl('/news/delete'); ?>",我必须将其更改为url:'/news/delete'。 谁可以帮助我编写可以运行代码url:"<?php echo Yii::app()->createUrl('/news/delete'); ?>"的js文件。

ps:Yii Framework在这里使用。

先谢谢。

2 个答案:

答案 0 :(得分:2)

我认为一个很好的解决方案是将数据属性添加到.btn-delete-news并使用目标网址填充它,这样在JS中你可以读出它并将其用作目标网址:

<强> PHP:

<button class="btn-delete-news" data-target="<?php echo Yii::app()->createUrl('/news/delete'); ?>" />

JS(使用jQuery):

$(".btn-delete-news").click(function() {
    if (!confirm('Are you sure to delete ?')) return false;
    var idNews = $(this).attr('news-info');

    console.log(idNews);
    $.ajax({
        url: $(this).data('target'),
        data: { id : idNews },
        type:"POST",
        success: function(data){
            if(data == "1") {
                window.location = "/news/";
            }
        }
    });
});

如果您想要

,您可以对目标位置执行相同的操作

答案 1 :(得分:1)

这是因为.js文件不会被解析为PHP文件,除非您将服务器设置为这样做(不推荐)。

由于PHP只用于构建URL,因此可以通过在头文件/主PHP文件中创建JS变量来实现更自然的功能。该变量应包含您应用的基本网址:

var baseUrl = '<?php echo Yii::app()->createUrl(); ?>';

该变量随处可用,因为它在全球范围内。

URL参数的更改很简单,不再需要PHP:

...
$.ajax({
    url: baseUrl + "/news/delete",
    ...

但是,既然你说你的应用只使用/news/delete,你可能甚至不需要PHP / baseUrl部分......


如果您使用更复杂的URL重写(感谢@MrSoundless),这是另一个建议。

您可以在标题中定义所有这些复杂的网址,而不仅仅是baseUrl,这样您就可以:

var deleteNewsUrl = '<?php echo Yii::app()->createUrl('/news/delete'); ?>';

在你的.js文件中,就是这样:

...
$.ajax({
    url: deleteNewsUrl,
    ...