我试图让Django在我的网页上创建有效的Ajax交互。
我已按照django-dajaxice的说明进行操作:http://django-dajaxice.readthedocs.org/en/latest/quickstart.html此处:http://django-dajaxice.readthedocs.org/en/latest/installation.html
但是,当我尝试在Chrome中运行该Ajax代码时,我得到的是一个弹出一个对话框,其中包含" undefined"在其中
BTW,这就是我从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 :(得分:4)
在遵循您引用的安装和快速入门参考时,我也在努力使用dajaxice示例。我的错误类似,但我看到“Dajaxice.example未定义。”
让我们调用主django项目myproj
和安装的应用程序,其中ajax.py文件位于myproj/myapp
。似乎让它适合我的两个部分是:
将包含def sayhello(request)
的ajax.py文件放在正确的目录中,并为sayhello函数使用相应的正确路径。
"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示例代码。
正确设置collectstatic以在我按代码更新时生成新的/static/dajaxice/dajaxice.core.js文件。
INSTALLED_APPS
python manage.py collectstatic
将所有文件拉入/ static /目录。这包括生成的文件/static/dajaxice/dajaxice.core.js
Dajaxice.myproj.sayhello
或Dajaxice.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" %}
答案 1 :(得分:1)
您正在发送POST
个请求,而CSRF middleware很可能会阻止该请求。相反,通过修改方法装饰器发送GET
请求:
@dajaxice_register(method='GET')
def sayhello(request):
return simplejson.dumps({'message':'Hello World'})
答案 2 :(得分:0)
我的错误:我在chrome(F12)中使用调试,Dajaxice可用,但是 Dajaxice.example 和 Dajaxice.example.sayHello 是未定义的。
您应该在settings.py
中安装APP 示例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 ,您无法将代码放入其他文件中。
cat example / 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'})