41675


下記の例（[情報源](https://atuweb.net/201609_laravel-get-ajax-
request/)）を見た時に、`jQuery.ajax`の`url`パラメターとしてbladeテンプレートと同じように`{{
}}`表現を使っても良いと推測しました。

[code]

    $.ajax({
      type: "POST",
      url : "{{ url('/api/login') }}",
      contentType: 'application/json',
      dataType: 'json',
      data: JSON.stringify({
        user   : user,
        passwd : passwd
      })
      :
    });
    
[/code]

Laravelは`{{ url() }}`というAJAX要求を理解しているなら、`{{ route()
}}`も理解してくれると推測し、次のAJAX要求を制作してみました。

[code]

    changeFragment(newFragment){
    
        let fragmentUrn = '{{ route( "admin.GetFragmentViaAjax", ["fragment" => "requests_all"]) }}';
    
        this.$MainContent.load(fragmentUrn, (response, status, xhr) => {
            status === 'success' ?  resolve() : reject(xhr);
        });
    }
    
[/code]

そのようにしてみますと、このようなエラーが出ます：

[![画像の説明をここに入力](https://i.stack.imgur.com/0bxs4.png)](https://i.stack.imgur.com/0bxs4.png)

問題は完全にJavaScriptの側にあるようです。


CC BY-SA 3.0
2018-02-12T03:50:31.147
41662
2018-02-12T18:47:36.177
2018-02-12T07:47:54.067
16876
16876
question
javascript jquery ajax laravel
Laravel 5.6 & AJAX: jQuery.load()のurlパラメターとして、{{ }}表現を使うのは本当に可能？


Blade内に書かれたコードはPHPにコンパイルされ、サーバー側で実行されてブラウザに返されます。そのため、質問で例として上げられているものは

[code]

    $.ajax({
      type: "POST",
      url : "http://example.com/api/login",
      contentType: 'application/json',
      dataType: 'json',
    
[/code]

のように展開されるためJSは問題なくこれを実行できます。

> `{{ url() }}`という要求をしている

という認識がそもそもの誤りであり、実際にはJSはこの段階で上記のようにURLしか見えません。（HTTPリクエストでPHPのコードを渡しているわけではありません）

一方で外部のjsファイルにブラケット記法(`{{
}}`)でPHPのコードを書いたところでそのコードはPHPは通らず直接返されます。もちろんJSは素直に解釈することしか出来ませんから
`http://example.com/{{` を読み込む、となります。

そもそももしクライアントからサーバーにPHPのコードが渡せるようであれば(そしてそれが実行されるのであれば)それは脆弱でしかありません。


CC BY-SA 3.0
2018-02-12T18:47:36.177
41675
2018-02-12T18:47:36.177
2376
41662
answer