Ich versuche ein Textfeld zu erstellen, das nach dem Eingeben eines Zeichens den Server abfragt.GET-Anfrage mit XHR-Objekt, URI-Komponentenname nicht gefunden
Ich erhalte den folgenden Fehler, und ich verstehe nicht, warum:
Traceback (most recent call last):
File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/utils/datastructures.py", line 83, in __getitem__
list_ = super(MultiValueDict, self).__getitem__(key)
KeyError: 'lift_string'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
response = get_response(request)
File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/core/handlers/base.py", line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/core/handlers/base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/workout/workoutcal/views.py", line 71, in get_lifts
search_str = request.GET['lift_string']
File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/utils/datastructures.py", line 85, in __getitem__
raise MultiValueDictKeyError(repr(key))
django.utils.datastructures.MultiValueDictKeyError: "'lift_string'"
ich es bekommen, wenn ich einen Charakter innerhalb dieses Textfeld eingeben:
<input id="lift" name="lift_string" type="text" onkeyup="getLifts()">
Diese ist die zugehörige Javascript des Textfeldes:
function addURLParam(url, name, value){
url += (url.indexOf("?") == -1 ? "?" : "&");
url += encodeURIComponent(name) + "=" + encodeURIComponent(value);
return url;
}
function getLifts(){
var xhr = createXHR();
xhr.onreadystatechange = function(){
if (xhr.readyState == 4){
if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304){
document.getElementById("xhrPar").innerHTML = xhr.responseText;
} else {
document.getElementById("xhrPar").innerHTML = "Request was unsuccessful: "+xhr.status;
}
}
};
var url = "http://localhost:8000/workoutcal/get_lifts";
addURLParam(url, document.getElementById("lift").name, document.getElementById("lift").value);
xhr.open("get", url, false);
xhr.send(null);
}
Und hier ist die Django Ansicht, dass der Griff get-Anfrage von dem XHR Objekt:
def get_lifts(request):
if request.method == 'GET':
search_str = request.GET['lift_string']
return HttpResponse('Received lift_string')
Es mir wie der Name lift_string
URI-Komponente scheint, dass ich zu url
in der Javascript hinzugefügt habe nicht gefunden werden kann? Warum?
EDIT: Der Inhalt des request.GET
:
Hinzufügen von print-Anweisung zu lesen:
def get_lifts(request):
if request.method == 'GET':
print("CONTENT OF request.GET: "+str(request.GET))
search_str = request.GET['lift_string']
return HttpResponse('Received lift_string')
führt zu dieser Ausgabe:
CONTENT OF request.GET: <QueryDict: {}>
Sind Sie sicher, dass nur die Ajax-Anfrage diese Ansicht trifft? Versuchen Sie auch, den Inhalt von 'request.GET' zu drucken. –
1. Das ist, soweit ich sagen kann, die einzige Ajax-Anfrage in meiner gesamten Web-App. Es gibt kein anderes XHR-Objekt irgendwo anders in meinem ganzen Projekt. 2. Inhalte von request.GET in der Bearbeitung hinzugefügt. Es ist leer – Sahand
(Ich meinte, könnte es eine Nicht-Ajax-Anfrage gewesen sein, die diese Ansicht trifft. Aber egal, Ivan hat die richtige Antwort hingewiesen.) –