未捕获的SyntaxError:意外的令牌/

时间:2014-02-06 18:14:58

标签: javascript php jquery ajax

我只是将一堆javascript从内联移动到一个单独的js文件中,以利用缓存文件等。

当我加载使用js文件的页面时,收到以下错误消息:

未捕获的SyntaxError:意外的令牌/

它抱怨的行号看起来像这样:

url:'<?php echo site_url('switches/showknownvins/'.$Name.'/'.$model.'/'.$fn);?>',

这是ajax调用的一部分。上面和下面的代码行如下所示:

    $.ajax({
    url:'<?php echo site_url('switches/showknownvins/'.$Name.'/'.$model.'/'.$fn);?>',
    type:'POST',
    dataType:'json',
    success: function(returnDataFromController) {

我总共有203行js代码,从:

开始
$(document).ready(function(){    

结尾
 });

当我将代码粘贴回PHP文件时,它可以正常工作。 我无法看到我的错误在哪里。

有什么建议吗?

由于

编辑1

如果我将.js文件重命名为.php并包含该文件,会产生什么影响? Web服务器是否仍会缓存它?这就是我所追求的。我正在努力提高我的网络应用程序的速度,因为我有很多移动用户。

3 个答案:

答案 0 :(得分:3)

JavaScript是内联的,因为它的一部分(特别是这里,JavaScript AJAX调用的url值)在返回客户端之前由PHP设置。希望您可以在问题中粘贴有问题的行中看到这一点。

当然,当PHP代码到达用户的浏览器时,浏览器将无法理解它 - 它是PHP代码。要么保留你内联的代码,要么做更难的事情,并设置你的服务器来提供动态JS,如果/当找不到请求的静态JS文件时。

答案 1 :(得分:2)

默认情况下,以.js结尾的文件名不会通过PHP处理器运行。

您可以重新配置您的网络服务器来执行此操作。或者将您的.js文件重命名为.php后缀。

将其重命名为.php不应影响缓存,但您可以发送缓存控制标头以尝试帮助浏览器退出。

答案 2 :(得分:1)

使用CodeIgniter,您可以通过以下控制器为JS提供服务:

创建资源控制器:

/codeigniter/2.1.4/yourAppName/controllers/resources.php

resources.php中添加:

class Resources extends CI_Controller
{
    public function js()
    {
        // JS call should look like the code below in your HTML
        // <script type="text/javascript" src="/resources/js/jsFileName.js"></script>
        // $this->uri->uri_string() should give the string "resources/js/jsFileName.js"
        if(is_file(APPPATH.'views/'.$this->uri->uri_string()))
        {
            header("Pragma: public");
            header("Cache-Control: maxage=604800"); // 1 week
            header('Expires: '.gmdate('D, d M Y H:i:s', (time()+604800)).' GMT'); // expire in 1 week
            header('Content-type: text/javascript');

            $this->load->view($this->uri->uri_string());
        }
    }
}

创建JS视图

/codeigniter/2.1.4/yourAppName/views/resources/js/jsFileName.js

jsFileName.js中,您现在可以使用完整的CodeIgniter库和本机PHP:

$(document).ready(function(){
    $.ajax({
        url:'<?php echo site_url('switches/showknownvins/'.$Name.'/'.$model.'/'.$fn);?>',
        type:'POST',
        dataType:'json',
        success: function(returnDataFromController){
        }
    });
});

值得注意的是,您在/config/autoload.php中声明的任何自动加载都将在每次单独的JS调用时自动加载,因此根据您的APP的重量,我建议请求只加载必需品的CI_Controller。 此外,如果您在调用JS文件时正在进行会话,那么事情变得非常丑陋和不稳定。