HTTP_X_REQUESTED_WITH nicht im ajax-call mit jquery
Bin ich mit Django zu entwickeln, eine neue website und ich stehe vor einem problem mit einem ajax-request. Ich habe schon gegoogelt und viel und lese viele Beiträge und Artikel (die meisten von Ihnen erklären).
Das Problem: Der ajax-Aufruf ausgeführt und ich erhielt die Anfrage im Blick, aber die Anfrage.is_ajax() gibt false zurück. Für das, was ich weiß, die Anfrage.is_ajax() überprüft den Wert der HTTP_X_REQUESTED_WITH header, aber ich kann es nicht sehen in den Kopfzeilen der Anfrage, so kann ich nicht überprüfen Sie die is_ajax() in meiner Ansicht.
HTML-Formular:
<form id="search-form" method="get" action="/search/">
<input type="text" id="search" name="search" placeholder="Search">
<button id="btn-search" >SEARCH</button>
</form>
Javascript:
$('#search-form').submit(function(e) {
e.preventDefault();
$.ajax({
url : $('#search-form').attr('action'),
type:'GET',
data : {
'search' : $('#search').val()
},
success: function(data, e) {
alert("SUCCESS")
},
error: function(data) {
alert("ERROR");
},
});
})
Meiner Sicht:
def search(request):
if request.is_ajax():
print "SOMETHING"
if request.GET:
import requests
url = API_END_POINT + '&name=Bruce+Springsteen'
response = requests.get(url).json()
return HttpResponse(json.dumps(response), content_type='application/json')
return render(request, 'core/search.html')
Dies ist, was ich sehe, in den Chrome-tab Netzwerk:
General
Remote Address:127.0.0.1:8000
Request URL:http://localhost:8000/search/?search=Bruce+Springsteen
Request Method:GET
Status Code:200 OK
Response Headers
Content-Type:application/json
Date:Sat, 06 Jun 2015 10:18:51 GMT
Server:WSGIServer/0.1 Python/2.7.6
X-Frame-Options:SAMEORIGIN
Request Headers
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip, deflate, sdch
Accept-Language:es-ES,es;q=0.8,en;q=0.6
Connection:keep-alive
Cookie:djdt=hide; messages="73ba7b40cd0a4a7e0812a0350babd2d1dd268820$[[\"__json_message\"\0540\05425\054\"You have signed out.\"]]"; csrftoken=TXImtQ3inUdCCOLUbEvoU9Hc8ddqpUlV
Host:localhost:8000
Referer:http://localhost:8000/search/
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36
Query String Parameters
search:Bruce Springsteen
Irgendwelche Ideen? Ich würde schätzen, Anregungen, weil ich viel zu viel Zeit mit diesem (wahrscheinlich dumme) Fehler.
Vielen Dank im Voraus.
- Ich kann dir nicht helfen in deinem problem, aber eines raten:
HTTP_X_REQUESTED_WITH
manipuliert werden können, überprüfen Sie diese aus: Web Security : Krümel schützen Sie Ihre PHP-API (Ajax) - Aufruf von Cross-site request forgery (CSRF/XSRF) und andere Schwachstellen - Zum Debuggen, versuchen
crossDomain: false
oder manuell erstellen der header mitheaders
. - Sorry für die Verzögerung bei der Beantwortung. Einstellung crossDomain auf false ändert sich nichts. Ich habe auch versucht, fügen Sie die HTTP_X_REQUESTED_WITH header (weil ich denke, dass ist die eine, die überprüft wird, um zu testen, die is_ajax Methode) und ich bekomme es nicht funktionieren. Ich habe versucht, fügen Sie die Kopfzeile mit diesem:
headers: { 'X-Requested-With': 'XMLHttpRequest' }
undbeforeSend: function(xhr) { xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); },
Du musst angemeldet sein, um einen Kommentar abzugeben.
Werd ich beantworte meine eigene Frage. Das problem wurde mit dem jquery .ajax () - Methode. Ich weiß nicht warum, aber diese Methode wird nicht die X-Requested-With XMLHttpRequest, die benötigt wird, von Django um zu überprüfen, ob die Anfrage eine ajax-Anfrage. Ich habe sogar versucht, fügen Sie die Kopfzeile mit den Möglichkeiten, wie angegeben, in meinem vorherigen Kommentar (
headers: { 'X-Requested-With': 'XMLHttpRequest' }
undbeforeSend: function(xhr) { xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); },
). Stattdessen nutze ich die .get () - Methode, von der ich vermute, dass standardmäßig setzen Sie diese header und es funktioniert.