2013-02-17 66 views
0

我想讓Django在我的網頁上產生工作的Ajax交互。如何獲得簡單,Hello World Dajaxice交互式工作?

我已經在這裏遵循的Django dajaxice說明:http://django-dajaxice.readthedocs.org/en/latest/quickstart.html這裏:http://django-dajaxice.readthedocs.org/en/latest/installation.html

然而,當我試圖運行在Chrome Ajax代碼,我得到的是一個對話框彈出字「未定義」在它

順便說一句,這是怎麼了,我從HTML頁面調用Ajax的:

<script type="text/javascript"> 
    function my_js_callback(data){ 
     alert(data.message); 
    } 
</script> 

AJAX!!<br/> 
<br/> 
<input id="myID" type="text" name="myID" maxlength="255" onclick="Dajaxice.example.sayhello(my_js_callback);"/> 
<br/> 

那麼,爲什麼我得到這個不確定的對話框? 我打開了Chrome的調試器,在這種情況下它不顯示任何錯誤。

順便說一句,當上面的安裝說明告訴我修改我的urls.py時,這是不明確的。我有兩個urls.py;一個用於我的網站,一個用於我的應用程序。我把這些陳述放在網站的url.py中。但我不確定這是否正確。有人可以確認或否認嗎?

+0

什麼是你從Django的端返回? – 2013-02-17 07:59:55

+0

Burhan,我該如何檢查從Django端返回的內容? 在Django的功能應該被調用看起來像這樣: @dajaxice_register 高清的SayHello(請求): 回報simplejson.dumps({「消息」:「你好世界」}) – 2013-02-17 09:07:05

+0

你是如何運行代碼,使用runserver?你有debug = True嗎? – 2013-02-17 09:13:07

回答

1

您正在發送POST請求,而最有可能的是CSRF middleware正在阻止它。相反,通過modifiying方法裝飾發送GET要求:

@dajaxice_register(method='GET') 
def sayhello(request): 
    return simplejson.dumps({'message':'Hello World'}) 
+0

當我按照您的建議將其更改爲GET請求時,它仍然不起作用。同樣的症狀。但是,這次當onclick事件觸發時,我發現它來自服務器窗口: [17/Feb/2013 13:12:18]「GET /dajaxice/myApp.sayhello/?argv=undefined HTTP/1.1」200 10567 此外,我在sayhello()中放置了一個print語句。如果它到達那裏,它應該將該行打印到服務器的控制檯上。但事實並非如此。所以它沒有得到sayhello()函數。 – 2013-02-17 18:15:44

4

下面你舉的安裝和快速入門的引用,而我也與dajaxice例子掙扎。我的錯誤類似,但我看到「Dajaxice.example not defined。」。

我們調用主django項目myproj和安裝的應用程序,其中ajax.py文件位於myproj/myapp。這兩個部分似乎得到它的工作對我來說是:含def sayhello(request)

  1. 廣場ajax.py文件在正確的目錄,並使用相應的正確路徑,SayHello的功能。

    • 將其放置在一個目錄中settings.INSTALLED_APPS列出的應用程序之一
    • 如果安裝的應用程序名稱被列爲"myproj", ajax的文件應該是myproj/ajax.py,JS的參考應該是:Dajaxice.myproj.sayhello(my_js_callback)
    • 如果您所安裝的應用程序名稱被列爲"myproj.subapp", ajax的文件應該是myproj/myapp/ajax.py,JS的參考應該是:Dajaxice.myproj.myapp.sayhello(my_js_callback) [我用這一個]
    • 記得把{% dajaxice_js_import %}模板<head>

    注意:在我的示例中,「myapp」可以替換爲「example」以匹配dajaxice示例代碼。

  2. 正確設置collectstatic以在代碼更新時生成新的/static/dajaxice/dajaxice.core.js文件。

    • 我按照您引用的dajaxice readthedocs安裝鏈接中列出的方向進行操作。
    • 新增STATIC =「/靜態/在settings.py文件
    • 加入 'django.contrib.staticfiles' 到INSTALLED_APPS在settings.py文件
    • python manage.py collectstatic將所有文件的拉入/靜態/目錄。這包括產生文件/static/dajaxice/dajaxice.core.js
    • 檢查這個文件,你應該看到對象層次的SayHello的功能:Dajaxice.myproj.sayhelloDajaxice.myproj.myapp.sayhello

此外,如果您是從http://www.dajaxproject.com/multiply/試圖乘例如,更改function calculate()ajax.py文件的位置匹配之一:

<script type="text/javascript" charset="utf-8"> 
    function calculate(){ 
     Dajaxice.myproj.myapp.multiply(Dajax.process,{'a':$('#a').val(),'b':$('#b').val()}) 
    }; 
</script> 

<script type="text/javascript" charset="utf-8"> 
    function calculate(){ 
    Dajaxice.myproj.multiply(Dajax.process,{'a':$('#a').val(),'b':$('#b').val()}) 
    }; 
</script> 

和在<head>部分包含相應的dajax js文件:

<script src="/static/dajax/jquery.dajax.core.js"></script> 

{% static "/static/dajax/jquery.dajax.core.js" %} 
0

我的錯誤:我在鉻(F12)使用調試,Dajaxice是可用的,但Dajaxice.exampleDajaxice.example.sayHello被undifined。

你應該將應用程序安裝例如在你的settings.py

http://django-dajaxice.readthedocs.org/en/latest/quickstart.html

INSTALLED_APPS = (
     'django.contrib.auth', 
     'django.contrib.contenttypes', 
     'django.contrib.sessions', 
     'django.contrib.sites', 
     'dajaxice', 
     'example', 
     ... 
) 

注例如/ ajax.py,你不能把代碼放到其他文件。

貓例子/ ajax.py

#!/usr/bin/env python 
#coding:utf-8 
from django.utils import simplejson 
from dajaxice.decorators import dajaxice_register 


@dajaxice_register() 
def sayhello(request): 
    return simplejson.dumps({'message':'Hello World'})