web-dev-qa-db-ja.com

JavaScriptで(laravel)配列を渡す

Laravel配列を渡して保存したい。->all()を使用したので、オブジェクトではなく、次のような結果が得られます。

array:83 [▼
  0 => 1
  1 => 11
  2 => 12
  ...
]

{{ $theArray }}を使用してビューでこれにアクセスできます。

しかし、何を試しても、これをJavaScript配列にすることはできませんでした。

私は試した

var array = {{ $theArray }};

var array = {{{ $theArray }}};

私は近くにいるように感じますが、それを理解することができませんでした

16
senty
var app = @json($array);

魅力のように働く

43
Alex Alekser

json_encode()を使用できます

_var array = {{ json_encode($theArray) }};
_

またはJSON.parse()を使用してjson文字列を解析します

_var array = JSON.parse('{{ json_encode($theArray) }}');
_
20
Pranav C Balan

引用符で囲んでいるか、json_encode()を使用している

_var array = "{{ $theArray }}";
            ^               ^
_

または、array()の値の場合

_var array = "{{ json_encode($theArray) }}";
            ^                            ^
_

Javascript変数を引用符で囲まないと、エラーが発生します。コンソールで確認できます。

3
Niranjan N Raju

これは私にとってはうまくいきます:)

var array =  {!! json_encode($theArray) !!};
2
Francisca GV

これは私のために働いた。

let array = JSON.parse('{!! json_encode($array) !!}');

2
Ajay

単に、ブレード構文を使用して特殊文字をエスケープします。これを試して。

var array = {!! $theArray !!};

最良の部分は、JavaScriptでオブジェクトフォームに解析する必要がないことです。

1
Aman

JavaScript変数を初期化するために、配列をJSONとしてレンダリングする目的でビューに配列を渡す場合があります。例えば:

<script>
    var app = <?php echo json_encode($array); ?>;
</script>

ただし、json_encodeを手動で呼び出す代わりに、@json Bladeディレクティブを使用できます。 @jsonディレクティブは、PHPのjson_encode関数と同じ引数を受け入れます。

<script>
    var app = @json($array);

    var app = @json($array, JSON_PRETTY_PRINT);
</script>

@jsonディレクティブは、Vueコンポーネントまたはdata- *属性をシードする場合にも役立ちます。

<example-component :some-prop='@json($array)'></example-component>

https://laravel.com/docs/5.8/blade#blade-and-javascript-frameworks

1
Zain

時々、all()Laravelコレクション を配列に変換するには不十分です。カスタムタイプオブジェクトのコレクションをLaravelビューを介してJSに渡そうとしたときに、この問題が発生しました。

フロントエンドJSで配列を取得するには、 Collection::values() メソッドの前に all() メソッドを適用する必要があります。

そう:

_
// In your HTTP controller
$collection = collect([myObj1,myObj2]); // The collection filled with custom type objects.

$myArray = $collection->values()->all(); // Then converted to an array. Just `all()` is not enough;

return view('myview', $myArray);
_
_{{-- In your myview.blade.php --}}

<script>window.myArray= @json($myArray)</script>
_

次に、JS _window.myArray_では、オブジェクト_[]_ではなく配列_{}_を取得します。

詳細

これはおそらく、配列のインデックスが昇順でない場合に発生しますPHPは、インデックスをオブジェクトキーと見なし、次に配列をオブジェクトと見なします。したがって、配列ではなくオブジェクトへの変換。 Laravelコレクションvalues()は、配列キーをリセットします。私はそれが内部でPHP array_values() を適用していると思います。

0
Valentine Shi