【问题标题】:JavaScript code in view issue in LaravelLaravel 中的 JavaScript 代码视图问题
【发布时间】:2013-09-02 05:00:54
【问题描述】:

我将 JavaScript 代码放在一个视图文件名 product/js.blade.php 中,并将其包含在另一个视图中,例如

{{ HTML::script('product.js') }}

我这样做是因为我想用 Laravel 函数在 JavaScript 中做一些事情,例如

var $path = '{{ URL::action("CartController@postAjax") }}';

其实一切正常,但是浏览器会抛出一个警告信息,如果可能的话我想问一下如何修复它。

资源被解释为脚本,但以 MIME 类型 text/html 传输

【问题讨论】:

    标签: laravel


    【解决方案1】:

    首先,将 Javascript 代码放在 Blade 视图中是有风险的。 Javascript 可能偶然包含同样是 Blade 语法的字符串,您绝对不希望它被解释。

    其次,这也是你得到浏览器警告信息的原因:

    Laravel 认为你的 Javascript 是一个普通的网页,因为你已经把它放到了 Blade 视图中,所以它是用这个 header 发送的......

    Content-Type: text/html
    

    如果您将文件命名为 product.js,而不是将其放入您的视图文件夹中,而是将其放入您的 javascript 资产文件夹中,它将具有正确的标题:

    Content-Type: application/javascript
    

    .. 警告信息将消失。

    编辑:

    如果您想从 Laravel 向 Javascript 传递值,请使用以下方法:

    将其插入您的视图中:

    <script type="text/javascript">
        var myPath = '{{ URL::action("CartController@postAjax") }}';
    </script>
    

    然后在你的外部脚本中使用这个变量。

    【讨论】:

    • 感谢您的回答和建议,我有两个问题 1. 如何使 .js 文件可以让 Laravel 使用我想要的功能? 2.如何使用HTML::script 包含,../app/views/.js 可以,但是我觉得不对
    • 不要把Javascript文件放在/app/views,把它们放在public/assets/javascript
    • 我把它们放在 assets/js/ 中,但是我不能使用 Laravel 功能。
    • Laravel 函数是什么意思?我不明白你想说什么。
    • $path = '{{ URL::action("CartController@postAjax") }}';我在 js.blade.php 响应“localhost/public/cart/ajax”中做到了,在 x.js 响应“{{ URL::action("CartController@postAjax") }}' XD
    【解决方案2】:

    只要确保 CartController@postAjax 返回 javascript 的内容类型就可以了。像这样的:

    #CartController.php
    protected function postAjax() {
    ....
    $contents = a whole bunch of javascript code;
    $response = Response::make($contents, '200');
    $response->header('Content-Type', 'application/javascript');
    ....
    }
    

    【讨论】:

      【解决方案3】:

      我不确定这是否是您所要求的,但这是一种非常容易地将 ajax 请求映射到 laravel 控制器方法的方法,而不必混淆您的脚本,这通常不是最好的方法做事。

      我使用这些类型的调用通过 ajax 将视图加载到仪表板应用程序中。代码看起来像这样。

      AJAX 请求(使用 jquery,但任何用于发送 ajax 的东西都可以)

      $.ajax({
      
          //send post ajax request to laravel
          type:'post',
      
          //no need for a full URL. Also note that /ajax/ can be /anything/.
          url: '/ajax/get-contact-form',
      
          //let's send some data over too.
          data: ajaxdata,
      
          //our laravel view is going to come in as html
          dataType:'html'
      
      }).done(function(data){
      
          //clear out any html where the form is going to appear, then append the new view.
          $('.dashboard-right').empty().append(data);
      
          });
      

      LARAVEL ROUTES.PHP

      Route::post('/ajax/get-contact-form', 'YourController@method_you_want');
      

      控制器

      public function method_you_want(){
      
      if (Request::ajax())
      {
           $data = Input::get('ajaxdata');
      
           return View::make('forms.contact')->with('data', $data);
      }
      

      我希望这对你有所帮助...这个控制器方法只是调用一个视图,但你可以使用相同的方法来访问你可能需要的任何控制器功能。

      此方法不会返回错误,并且通常比将 JS 放入视图中的风险要小得多,这实际上更适用于页面布局,而不是任何繁重的脚本/计算。

      【讨论】:

        【解决方案4】:
        public function getWebServices() {   
        $content = View::make("_javascript.webService", $data);
        
            return (new Response($content, 200))->header('Content-Type', "text/javascript");
        }
        

        在控制器的方法中返回上述内容

        并在 _javascript 文件夹内的 webService 视图中编写您的 javascript 代码。 我没有通过 ajax 加载获取数据,而是使用该特定数据创建 js 刀片并对其进行 base64_encode,然后在我的 js 代码中解码并使用它。

        【讨论】:

          猜你喜欢
          • 2019-04-24
          • 2014-12-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-12-19
          • 1970-01-01
          • 2021-05-24
          相关资源
          最近更新 更多