2013-02-17 44 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'})