2016-10-03 4 views
1

Ich benutze Laravel 5 und ich mache einige Filter auf einige Sammlungen in meinem Controller. Das Problem besteht darin, AJAX als Brücke zwischen der Blade-Vorlage und dem Controller zu verwenden. Hier ist meine jQuery-Code:Laravel 5 jQuery mit AJAX

function listCreatedBy(str) { 
     $.ajax({ 
      headers : { 
      'csrftoken' : '{{ csrf_token() }}' 
      }, 
      url: '{{ url("search") }}', 
      type: "get", //send it through get method 
      data:{txt:str}, 
      success: function(response) { 
      console.log("ola"); 
      $('#results').html(response); 
      }, 
      error: function(xhr) { 
      console.log(xhr); 
      } 
     }); 
    } 

Hier ist meine Route:

Route::get('/search/{txt}', '[email protected]')->name('search'); 

Und hier ist meine Methode in der Steuerung:

public function search($searchText){ 
    var_dump($searchText); 

    return "results"; //Just to see if it's returning correctly 
} 

Diese Methode ist jetzt leer, weil ich nur möchte sehen, ob ich den Ajax-Code zuerst vervollständigen kann. Aber es gibt einen 404 Code, Not Found. Irgendeine Idee, was ich falsch mache?

Antwort

2

In diesem Aufruf an Ihrem Ajax

headers : { 
    'csrftoken' : '{{ csrf_token() }}' 
} 

bearbeiten

i sehen Sie die Route verwenden

Route::("/search/{txt}" ... 

Hexe entspricht

http://example.com/search/random%20text 

Was wohl passiert, ist, dass Sie die Route falsch die Ajax verwenden rufen Sie machen wird ein uri wie erstellen diese

http://example.com/search/?txt=some%20text 

versuchen diese

$.ajax({ 
     headers : { 
     'csrftoken' : '{{ csrf_token() }}' 
     }, 
     url: "{{ url("search") }}/" + encodeURIComponent(str), 
     type: "get", //send it through get method 
     success: function(response) { 
     console.log("ola"); 
     $('#results').html(response); 
     }, 
     error: function(xhr) { 
     console.log(xhr); 
     } 
}); 
+0

Ich tat, aber immer noch nichts. Ich habe den Beitrag aktualisiert, um den Tippfehler in der Route zu korrigieren und dies in der Anfrage hinzuzufügen. Immer noch 404 Fehler –

+0

bearbeitet mein awnser es versuchen. –

+0

Danke: D Das hat den Trick gemacht. –

0

versuchen zu tun, wie dies

$.ajax({ 
    url: "/search/"+str, 
    type: "GET", 
    data:'', 
    success: function(response) { 
    document.getElementById("results").innerHTML = this.responseText; 
    }, 
    error: function(xhr) { 
    console.log(xhr); 
    } 
}); 

Route::get('/search/{txt}', '[email protected]'); 

public function getSearch($searchText){ 
    dd($searchText); 
    return "results"; //Just to see if it's returning correctly 
} 
+0

Noch einen 404 Fehler bekommen –

+0

Kann mir plz eine Sache .. Zum Browser gehen und geben Sie Ihre URL zB app.dev/search/mystring .. und sagen Sie mir, dass Ihre Methode aufgerufen wird oder nicht – Komal

+0

Es wird gesagt, dass die Route nicht existiert. Aber hier ist meine Route: 'Route :: get ('/ search/{$ txt}', 'PrestashopController @ search');' –

0

Try this:

$.ajax({ 
    url: '{{ url("/route_name") }}', 
    // here route_name is a named route that call a controller function 
    type: "get", //send it through get method 
    data:{txt:str}, 
    success: function(response) { 
    $('#results').html(response); 
    }, 
    error: function(xhr) { 
    console.log(xhr); 
    } 
}); 
+0

Immer noch eine 404-Fehler –

+0

ROUTE muss Typ erhalten –

+0

Und es ist. 'Route :: get ('/ search/{$ txt}', 'PrestashopController @ search');' –

0

mit der Full-Pfad URL versuchen ..

url: '{{ url("/search") }}', 

lassen Sie Ihre AJAX so sein ..

$.ajax({ 
      url: '{{ url("/search") }}', 
      type: "get", //send it through get method 
      data:{txt:str}, 
      success: function(response) { 
      document.getElementById("results").innerHTML = this.responseText; 
      }, 
      error: function(xhr) { 
      console.log(xhr); 
      } 
}); 
+0

Immer noch eine 404 Fehler –

+0

überprüfen Sie die URL in der Konsole, oder gibt es einen Fehler in der Konsole ..? – Sarath

+0

Hier finden Sie die allgemeinen Informationen in der Konsole: 'URL anfordern: http: // localhost/a3p/public/search?txt = ddd Anfrage Methode: GET Statuscode: 404 nicht gefunden Remote-Adresse: [:: 1]: 80' –

1

Ich denke, Sie haben Tippfehler.

Route::get('/search/{$txt}' 

Versuch ohne $

Route::get('/search/{txt}',... 

Ein more..try in der Controller-Methode diesen Code in den Bereichen zu verwenden, nicht mehr als $ Suchtext.

public function search(Request $request) 

und nach dem Zugriff auf die $ txt Variable wie diese

$test = $request->get('txt'); 
var_dump($test 

);

und in Code verwendet jQuery dies:

function listCreatedBy(str) { 
     var query_url = '{{ url("search") }}' + str; 
     $.ajax({ 
      url: query_url , 
      type: "get", //send it through get method 
      success: function(response) { 
      console.log("ola"); 
      $('#results').html(response); 
      }, 
      error: function(xhr) { 
      console.log(xhr); 
      } 
     }); 
    } 

HINWEIS: csrftoken ist für Formulare einreichen

+0

Sie haben Recht, aber es gibt mir immer noch eine 404 nicht gefunden. –

+0

versuchen, die URL aus dem Browser zu laden, wenn es in Ordnung ist, versuchen Sie es aus dem Ajax-Formular und von den Entwicklertools des Browsers, überprüfen Sie die Antwort. Geben Sie den neuen Route() - Code und die URL, die Sie in die Adressleiste schreiben, an. – ivant87

+0

Nun ruft es die Methode auf, wenn ich die URL direkt in den Browser setze. 'http: // localhost/app/public/suche/hallo' –

0

Sie können dieses versuchen;

$.ajax({ 
     url: "/search/", 
     type: "GET", 
     data:{txt:str}, 
     success: function(response) { 
     document.getElementById("results").innerHTML = this.responseText; 
     }, 
     error: function(xhr) { 
     console.log(xhr); 
     } 
    }); 

Route:

Route::get('/search/', '[email protected]'); 

Controller:

public function getSearch(Request $request){ 
    dd($request->txt); 
    return "results"; //Just to see if it's returning correctly 
}