2017-10-13 5 views
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: {}> 
+0

このビューに当たるのはAjaxリクエストだけですか?また、 'request.GET'の内容を印刷してみてください。 –

+0

1.これは私のウェブアプリケーション全体で唯一のAjaxリクエストを伝えることができる限りです。私のプロジェクト全体にXHRオブジェクトが他にはありません。 2.編集にrequest.GETの内容を追加しました。それは空です – Sahand

+0

(私は、それはそのビューを打つ非Ajax要求だった可能性がありますが、アイバンは正しい答えを指摘しています。) –

答えて

2

あなたはurladdURLParamの結果を代入するのを忘れ、このように:

url = addURLParam(url, document.getElementById("lift").name, document.getElementById("lift").value); 
関連する問題