2015-02-19 7 views
8

enter image description here Ich bin neu in "AJAX" und ich habe versucht, eine Anfrage "ONSELECT" mit "AJAX" zu senden und erhalten eine "JSON" Antwort in "Laravel 5".Verwendung von AJAX und Rückgabe von JSON Array in Laravel 5

meine hier Ansicht ist

<select> 
<option data-id="a" value="a">a</option> 
<option data-id="b" value="b">b</option> 
<option data-id="c" value="c">c</option> 
</select> 

<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> 

<script type="text/javascript"> 
$('select').change(function(){ 
var data = $(this).children('option:selected').data('id'); 

$.ajax({ 
    type :"POST", 
    url  :"http://localhost/laravel/public/form-data", 
    dataType:"html", 
    data :{ data1:data }, 

    success :function(response) 
    alert("thank u"); 
    }), 
}); 
</script> 

Hier ist mein Controller-Ajax-Request

public function formdata(){ 
    $data = Input::get('data1'); 

    //somecodes 

    return Response::json(array(
        'success' => true, 
        'data' => $data 
       )); 
} 

Hier ist meine Strecke

Route::post('form-data',array('as'=>'form-data','uses'=>'[email protected]')); 

ich auch die URL versucht haben, zu erhalten zu ändern Ajax mit nur form-data und {{Url::route('form-data')}}.

+0

Hallo Prasad, Wh Bei einem Fehler bekommst du? –

+0

Es gibt keine Fehler, aber der Code funktioniert einfach nicht –

+0

auch in Laravel 5 die Syntax soll ändern, das ist der Hauptgrund –

Antwort

14

Laravel 5 Anwendungen CSRF-Token-Validierung aus Sicherheitsgründen .. ..try this ...

  1. In Routen.php

    route post('form-data', '[email protected]'); 
    
  2. Im Master-Layout-Datei

    <meta name="csrf-token" content="{{ csrf_token() }}" /> 
    
  3. var CSRF_TOKEN = $('meta[name="csrf-token"]').attr('content');
    $.ajax({ 
        url: '/form-data/', 
        type: 'POST', 
        data: {_token: CSRF_TOKEN}, 
        dataType: 'JSON', 
        success: function (data) { 
         console.log(data); 
        } 
    }); 
    
1

Sie haben einen Fehler im Code gemacht, bitte schreiben Sie ihn richtig.

$.ajax({ 
    type :"POST", 
    url  :"http://localhost/laravel/public/form-data", 
    dataType:"json", 
    data :{ data1:data }, 
    success :function(response){ 
    alert("thank u"); 
    } 
}); 

aktualisieren

Ich sah nur Ihre Rückkehr Datentyp json ist, so verwenden

dataType:"json", 

oder

dataType:"jsonp", 
+0

bereits versucht, aber ich habe meinen Code aktualisiert –

+0

JSON oder JSONS hat nicht funktioniert –

+0

wenn ich hinzufügen eine Warnung nach "var data" funktioniert es als Warnung vor Ajax, aber nach Ajax keine Antwort –

4

hinzufügen Fehler-Callback auf Ihre Ajax-Anforderung zu finden, wenn ein Fehler wird ausgelöst,

$.ajax({ 
    type :"POST", 
    url  :"http://localhost/laravel/public/form-data", 
    dataType:"json", 
    data :{ data1:data }, 
    success :function(response) { 
    alert("thank u"); 
    }, 
    error: function(e) { 
    console.log(e.responseText); 
    } 
}); 

Es ist besser, console.log() zu verwenden, um detaillierte Informationen anzuzeigen, auch wenn die Antwort eine JSON-Zeichenfolge ist. Versuchen Sie den Code ein und lassen Sie uns wissen, wenn etwas

an den Browser-Konsole angemeldet ist
+0

immer noch keine Verwendung, aber es ist auch über Laravel 5 wo einige Syntax ändern sich auch und wurde vor fast 10 Tagen freigegeben –

+0

Welche Antwort bekommen Sie von der Steuerung? –

+0

Ich versuche, eine JSON-Antwort zu erhalten, aber in dieser Funktion wird keine Antwort bei der Ausführung zurückgegeben. Ich möchte nur die Erfolg Antwort, aber in JSON –

2

Ihre jQuery-Code hat Syntaxfehler in success Rückruf, deshalb seine keine post Anfrage Laravel machen, versuchen Sie bitte unten Javascript wird es funktionieren

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> 
 
<select> 
 
<option data-id="a" value="a">a</option> 
 
<option data-id="b" value="b">b</option> 
 
<option data-id="c" value="c">c</option> 
 
</select> 
 

 
<script type="text/javascript"> 
 
$(function() { 
 
    \t $('select').on('change', function (e) { 
 
    \t \t var data = $(this).children('option:selected').data('id'); 
 
\t $.ajax({ 
 
\t \t type :"POST", 
 
    \t dataType:"json", 
 
\t \t url  :"http://localhost/laravel/public/form-data", 
 
\t \t data :{ data1:data }, 
 
\t \t success :function(response) { 
 
\t \t \t \t alert("thank u"); 
 
\t \t } 
 
\t }); 
 
}); 
 
}) 
 
</script>

In Laravel, können Sie zurück nur array oder object und es wird automatisch auf json Antwort konvertieren

return ['success' => true, 'data' => $data]; 
+0

versuchen, 'php Artisan route: list' laufen und stellen Sie sicher, dass http: // localhost/Laravel/public/form-data' Route registriert ist, verwenden Sie über Code es wird funktionieren – Saqueib

1

Das Problem war, Typ sollte "GET" anstelle von "POST" und

route get('form-data', '[email protected]'); 

Thank U jeden für Ihre Hilfe

+0

Großartig, aber die Methode der Anfrage ändern, nur weil etwas nicht funktioniert, ist keine gute Lösung. Sie können die Konsole überprüfen, um den Fehler für die Postanforderung zu verfolgen, wenn Sie lernen müssen. Prost :) –

+0

Ja sicher werde ich –

0

Besser, wenn Sie senden alle Formulardaten dann Daten verwenden: $ (this) .serialize() in Ajax, und innerhalb Form verwenden {{csrf_field()}}