Javascript 是否可以在Slim中调用外部js文件中的路由

Javascript 是否可以在Slim中调用外部js文件中的路由,javascript,routes,slim,Javascript,Routes,Slim,在我的twig文件中,我调用了一个到我的ajax的路由,就像这样 var fund = $('#fund'); //this will call php to populate fund drop-down $.ajax({ url: "{{ path_for('myfundrequest') }}", type: 'get', dataType: 'json' }).done(function (

在我的twig文件中,我调用了一个到我的ajax的路由,就像这样

var fund = $('#fund');

        //this will call php to populate fund drop-down
        $.ajax({
        url: "{{ path_for('myfundrequest') }}",
        type: 'get',
        dataType: 'json'
        }).done(function (response) {
        var len = response.length;

        fund.empty();

        for (var i = 0; i < len; i++) {
        var fundNum = response[i][0];
        var fundName = response[i][1];

        fund.append("<option value='" + fundNum + "'>" + fundNum + ' -- ' + fundName + "</option>");
        }
        fund.prepend("<option value=''>- Select A Fund -</option>").val('');
        }).fail(function (jqXHR, textStatus, error) {
        console.log("getFund: " + error);
        });
        });
我的问题是,如果我在公用文件夹中创建一个外部js文件 是否可以在外部文件中执行此操作
url:“{path_for('myfundrequest')}

不,在普通JavaScript文件上不可能,但是

我可以想出两个选择:

  • 将JavaScript文件添加为twig文件,然后在路由上使用twig进行渲染

    $app->get('/data/myScripts.js', 'ScriptProvider:myScript');
    
    class ScriptProvider {
        public function myScript($req, $res) {
            return $this->view->render($res, 'data/myScript.js.twig');
        }
    }
    
  • 将URL作为全局变量添加到全局对象上

    小枝索引


  • 第二个选项的性能更高,因为细枝引擎不需要运行。

    并且Slim不会处理它,对吗?您只是有一些文件要在Slim之外运行?是另一个PHP文件吗?您使用的是Apache类型服务器吗?url调用的是控制器中的函数。是的,Apache。如果您不想Slim处理url,而不是直接在url中运行文件,然后您可以设置.htaccess,以便Slim不会处理现有文件的url。如果您对此感兴趣,我将发布一个答案。我有大约1000行js。我应该将其保留在正在工作的小树枝文件中,还是将其移动到外部l js文件?我会将其移到js文件中。我会将
    RewriteCond%{REQUEST\u FILENAME}!-f
    添加到.htaccess。看看这是如何用于Slim或其他框架的。我尝试了第二种方法,并在('myvendorrequest')中得到了此错误
    %7B%7B%20path\u%20%7D%7D
    @moe你从哪里得到一个错误,这也不是一个真正的错误。我在控制台中看到了它。这是响应
    {“message”:“not found”}
    @moe可能是你路线的响应?按照@Nima建议的方式对路线进行第二次硬编码有什么好处?
    $app->get('/data/myScripts.js', 'ScriptProvider:myScript');
    
    class ScriptProvider {
        public function myScript($req, $res) {
            return $this->view->render($res, 'data/myScript.js.twig');
        }
    }
    
    <!-- [..] -->
    <script>
       Url = {
           myfundrequest: "{{ path_for('myfundrequest') }}"
       };
    </script>
    
    $.ajax({
        url: Url.myfundrequest,
        ..