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


Understand PHP code in the separately JS file

$(".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 => script运行错误,它不理解代码:url:"<?php echo Yii::app()->createUrl('/news/delete'); ?>",我必须将其更改为url:'/news/delete'。谁能帮我把js文件中可以运行的代码url:"<?php echo Yii::app()->createUrl('/news/delete'); ?>" .

ps: Yii框架在这里使用。

我认为一个很好的解决方案是为。btn-delete-news添加一个data属性并填充目标url,以便在JS中您可以读取它并将其用作目标url:

PHP:

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

JS (with 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/";
            }
        }
    });
});

如果你想

,你也可以对目标位置做同样的操作

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

因为PHP只用于构建URL,你可以通过在你的头/主PHP文件中创建一个JS变量来实现更自然的东西。这个变量应该包含你的应用的基础URL:

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

该变量将在任何地方可用,因为它在全局作用域中。

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

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

然而,因为你说你的应用程序只与/news/delete工作,你可能甚至不需要PHP/baseUrl部分…


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

你可以在标题中定义所有这些复杂的url,而不仅仅是baseUrl,所以你可以有:

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

在你的。js文件中,只需要这样:

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