Wie bringt man Laravel dazu, den “Content-Type”-Header einer Ansicht als “application/javascript” zurückzugeben?

Lesezeit: 3 Minuten

Ich versuche, eine dynamische Javascript-Datei zum Einbinden von externen Websites mit auszugeben [script src=""] Schild. Da die Ansicht die Blade-Engine verwendet, wird sie als gerendert text/html.

Ich möchte die Content-Type Kopfzeile, auf die gesetzt werden soll application/javascript nur für diese Ansicht, um zu vermeiden, dass Chrome mich mit Meldungen wie “Resource interpreted as Script but transferred with MIME type text/html:

Mein Steuergerät:

{
    // ...
    return View::make('embedded')->with('foo', $foo);
}

Die Ansicht selbst:

<?php
header('Content-Type: application/javascript; charset=UTF-8', true);
?>(function(jQuery) {
    // append stylesheets to <head>
    var file;
    // ...
})(jQuery);

Ich habe festgestellt, dass ich verwenden kann header() aus meiner Sicht zum Hinzufügen benutzerdefinierter Header wie X-Content-Type wie erwartet, aber wenn ich versuche, das neu zu definieren Content-Type Header scheint es nicht einmal mit dem zu tun replace Parametersatz als true.

Mir fehlt hier sicherlich etwas Offensichtliches, ich würde mich freuen, wenn Sie mich darauf hinweisen würden 🙂

vielen Dank für deine Hilfe

Mit Laravel können Sie Header-Informationen über die Response-Klasse ändern, also müssen Sie davon Gebrauch machen. Entferne das header Linie aus Ihrer Sicht und versuchen Sie es so in Ihrem Controller:

$contents = View::make('embedded')->with('foo', $foo);
$response = Response::make($contents, $statusCode);
$response->header('Content-Type', 'application/javascript');
return $response;

  • Und realistischerweise ist der Controller der ideale Ort, um mit Kopfzeilen herumzuspielen, nicht mit der Ansicht;)

    – Hagel

    8. September 2013 um 21:35 Uhr

  • Das geht nicht.!!! Ich bekomme make () nicht definiert, ich habe die Antwort bereits geerbt.

    – Sam

    28. April 2017 um 12:03 Uhr

  • @sam: Es sollte mit Laravel 4 funktionieren, aber nicht mit Laravel 5.

    – Ziruvan

    3. Mai 2017 um 14:05 Uhr

In Laravel 5.4 können Sie dies tun:

$contents = view('embedded')->with('foo', $foo);
return response($contents)->header('Content-Type', 'application/javascript');

Übrigens, es ist nicht nötig, den Header in der Ansicht festzulegen.

  • Als ich diesen ausprobierte, bekam ich “Undefined method ‘header’.intelepense(1013) “

    – Afeesudheen

    19. Juni 2020 um 15:41 Uhr

In Laravel 5.6:

return response()
    ->view('embedded', ['foo' => $foo])
    ->header('Content-Type', 'application/javascript');

Benutzeravatar von iconoclast
Bilderstürmer

Wenn Sie nur JSON in einer Variablen haben und es mit dem richtigen Inhaltstyp im Header an den Browser senden möchten, müssen Sie nur Folgendes tun:

return Response::json($json);

vorausgesetzt natürlich, dass $json enthält Ihr JSON.

Abhängig von den Details Ihrer Situation kann es sinnvoller sein, Ansichten zu verwenden (anstatt Ihr JSON durch Verketten von Zeichenfolgen zu erstellen), aber dies ist immer noch eine Option, wenn Sie eine Ansicht zum Erstellen der Zeichenfolge verwenden. Etwas ungefähr in dieser Richtung sollte funktionieren:

$json = View::make('some_view_template_that_makes_json') -> with ('some_variable', $some_variable)
return Response::json($json);

(Entschuldigung, wenn ich einen Teil der Frage verpasst habe, der einen manuelleren Ansatz erfordert! Zumindest sollte dies für jemanden nützlich sein, der hierher kommt und sich fragt, wie man JSON von Laravel mit dem richtigen Inhaltstyp sendet.)

Response::json() ist nicht mehr verfügbar.

Sie können stattdessen response->json() verwenden.

use Illuminate\Contracts\Routing\ResponseFactory;
$foobar = ['foo' => 0, 'bar' => 'baz'];
return response()->json($foobar);

Gibt:

{"foo":0,"bar":"baz"}

Mit den entsprechenden Überschriften.

  • Hat bei mir funktioniert danke 🙂

    – Harkor

    24. März 2017 um 10:03 Uhr

Benutzeravatar von Rolly
Rolli

Das hat bei mir funktioniert
return Response::view($landing)->header('X-Frame-Options', 'DENY');

  • Hat bei mir funktioniert danke 🙂

    – Harkor

    24. März 2017 um 10:03 Uhr

1444760cookie-checkWie bringt man Laravel dazu, den “Content-Type”-Header einer Ansicht als “application/javascript” zurückzugeben?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy