0
文字を入力するとサーバーに照会するテキストボックスを作成しようとしています。XHRオブジェクトでGET要求、URIコンポーネント名が見つかりません
私は、次のエラーを取得していますし、なぜ私は理解していない:私はこのテキストボックス内の文字を入力したとき、私はそれを取得しています
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'"
:
<input id="lift" name="lift_string" type="text" onkeyup="getLifts()">
このテキストボックスの関連するjavascriptです:
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);
}
ここでは、 XHRオブジェクトから要求を取得:
def get_lifts(request):
if request.method == 'GET':
search_str = request.GET['lift_string']
return HttpResponse('Received lift_string')
私はJavaScriptでurl
に追加したlift_string
URIコンポーネント名が見つからないようですが、私には思えますか?どうして?
EDIT:request.GET
の内容:ビューにprint文を追加
:
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')
は、この出力につながる:
CONTENT OF request.GET: <QueryDict: {}>
このビューに当たるのはAjaxリクエストだけですか?また、 'request.GET'の内容を印刷してみてください。 –
1.これは私のウェブアプリケーション全体で唯一のAjaxリクエストを伝えることができる限りです。私のプロジェクト全体にXHRオブジェクトが他にはありません。 2.編集にrequest.GETの内容を追加しました。それは空です – Sahand
(私は、それはそのビューを打つ非Ajax要求だった可能性がありますが、アイバンは正しい答えを指摘しています。) –