Me he estado golpeando la cabeza contra la pared durante 2 días, buscando una solución para este problema, por favor ilumíname con esto:
Tengo este código JavaScript que incluye un archivo blade y pasa datos a través de él.
const loadTemplate = (locationinfo) => { let info = ` <div class="location-info"> <h1>${locationinfo.business_name}</h1> @include('pages/business-space/templates/t1',[ 'locationinfo'=>'${JSON.stringify(locationinfo)}', //this is the code ]) </div>`; return info; } Cuando registro JSON.stringify(locationinfo) en mi consola, es solo una cadena json simple:
{ "id":3, "business_name":"Wen", "business_address":"sdfsdf", "lat":14.764397881407836, "lng":121.08031105807841, "is_active":"Yes", "created_by":null, "date_created":"2022-06-17 11:09:42" }En mi t1.blade.php, si hago eco de la variable locationinfo, todavía muestra lo mismo:
echo $locationinfo; //and the result: { "id":3, "business_name":"Wen", "business_address":"sdfsdf", "lat":14.764397881407836, "lng":121.08031105807841, "is_active":"Yes", "created_by":null, "date_created":"2022-06-17 11:09:42" } Pero cuando traté de decodificarlo usando json_decode , se vuelve nulo. Aquí está mi código:
$arr = json_decode($locationinfo); //this is null foreach ($arr as $key => $value) { echo $key; }Otro error:
$arr = json_decode($locationinfo, true); foreach ($arr as $key => $value) { echo $key; } //error: foreach() argument must be of type array|object, null given¿Por qué está pasando esto? Gracias por adelantado.
Primero asegúrese de que $locationinfo sea exactamente una cadena json. Sospecho que es una matriz asociativa de php.
Intente echo $locationinfo['id']; . Si aparece el valor, no desea decodificarlo. Use $locationinfo directamente sin decodificación json.
Si es un json, intente usarlo así,
$arr = json_decode($locationinfo, true);Agrega una tira de barras.
$data = json_decode(stripslashes($data),true);Demostración: http://codepad.org/XX9QD3iX
Respondido aquí: https://stackoverflow.com/a/37599821/19168006
Editar: el ejemplo en la demostración tiene un error stdClass, este es el que funciona: http://codepad.org/lfJJu5yA
no puede pasar datos js a php, porque php renderizó primero.
pero puedes llamar a ajax y devolver la hoja a la respuesta
tu llamada ajax
const loadTemplate = (locationinfo) => { $.ajax({ data: { 'locationinfo': locationinfo, }, type: "post", url: "{{route('someRoute')}}", success: function (data) { let info = ` <div class="location-info"> <h1>${locationinfo.business_name}</h1> ${data} </div>`; return info; }, error: function () { //has error } }); }tu ruta
Route::get('/getAjaxData', [AjaxController::class,'show']) ->name('someRoute'); // but i use __invoke controllertu controlador
<?php namespace YOUR_NAMESPACE; use App\Http\Controllers\Controller; use Illuminate\Http\Request; class AjaxController extends Controller { public function show(Request $request) { $data = $request->input('locationinfo'); return view('pages/business-space/templates/t1')->with([ 'locationinfo' => $data, ]); } }