2010-06-07 69 views
0

我是新來的ajax和Django的Web開發。 現在我的模板包含:sample.html在Django問題中使用ajax代碼

<html> 
<body> 
<script language="javascript" type="text/javascript"> 
//Browser Support Code 
function ajaxFunction(){ 
     var ajaxRequest; // The variable that makes Ajax possible! 

     try{ 
       // Opera 8.0+, Firefox, Safari 
       ajaxRequest = new XMLHttpRequest(); 
     } catch (e){ 
       // Internet Explorer Browsers 
       try{ 
         ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP"); 
       } catch (e) { 
         try{ 
           ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP"); 
         } catch (e){ 
           // Something went wrong 
           alert("Your browser broke!"); 
           return false; 
         } 
       } 
     } 



     // Create a function that will receive data sent from the server 
     ajaxRequest.onreadystatechange = function(){ 
       if(ajaxRequest.readyState == 4){ 
         document.myForm.time.value = ajaxRequest.responseText; 
       } 
     } 
     ajaxRequest.open("GET", "/showtime/", true); 
     ajaxRequest.send(null); 
} 

</script> 



<form name='myForm'> 
Name: <input type='text' onBlur="ajaxFunction();" name='username' /> <br /> 
Time: <input type='text' name='time' /> 
</form> 
</body> 
</html> 

在views.py我的功能是:

def showtime(request): 
     string = "Ajax Application" 
     data = {"string" : string} 
     pprint (data) 
     return render_to_response("sample.html",data) 

現在,未如預期的輸出。該模板沒有收到服務器發送的迴應 代碼有什麼問題?

+1

我在您的模板中的任何地方都看不到{{string}}。你的代碼是做什麼的? – 2010-06-07 11:37:41

+0

模板收到了什麼?時間字段是否填充完整的html頁面? – Amarghosh 2010-06-07 11:52:17

+0

你確定你有正確的URL模式條目嗎? – Amarghosh 2010-06-07 11:57:04

回答

0
  1. 如果您在瀏覽器中輸入/ showtime /按預期工作,請嘗試!
  2. 使用像jquery這樣的js框架將爲您節省時間和精力實現ajax的東西,例如。看到這個教程http://lethain.com/entry/2007/dec/11/two-faced-django-part-5-jquery-ajax/
  3. 還有一些你可以使用的內置的Django,比如request.is_ajax來驗證請求是否真的是來自ajax的comng!
+0

is_ajax很好,但是你失去了在瀏覽器中點擊URL來檢查響應的能力。當我希望相同的視圖對ajax請求做出不同的響應時,我只使用is_ajax。 – 2010-06-07 17:32:36

4

如果您嘗試使用AJAX返回的字符串填充文本字段,則不應使用render_to_response。只要返回字符串。

def showtime(request): 
    s = "Ajax Application" 
    print "Returning %s"%s #is this line executed? 
    return HttpResponse(s, mimetype="text/plain") 
+0

您總是應該返回一個HttpResponse對象,如return HttpResponse(「Ajax Application」,mimetype =「text/plain」) – mawimawi 2010-06-07 12:02:08

+0

@mawimawi再校正 – Amarghosh 2010-06-07 12:10:24

+1

:不要使用print語句。在某些服務器設置中,print語句導致HTTP 500錯誤(據我所知,在wsgi或fcgi中就是這種情況)。只需返回HttpResponse。 – mawimawi 2010-06-07 12:20:02