Dajaxice:出了点问题。

时间:2014-09-02 02:43:50

标签: python django pycharm dajaxice

我正在使用PyCharm(用于DJango Framework的IDE),它似乎工作但我有这个错误

error: [Errno 10053] An established connection was aborted by the software in your host machine

当我点击Dajaxice回拨按钮时查看控制台时,它说

Dajaxice: Something went wrong. 

这是模板:

 <input type="submit" class="btn btn-primary" value="Display" id="showbutton" onclick="Dajaxice.tbl.sayhello(my_js_callback);">

出于某种原因,我的应用名称为tbl

ajax.py

from django.utils import simplejson
from dajaxice.decorators import dajaxice_register

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

url.py

from django.conf.urls import patterns, include, url
from dajaxice.core import dajaxice_autodiscover, dajaxice_config
dajaxice_autodiscover()
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
                   url(r'^$', 'tbl.views.display_maps', name='home'),
                   url(r'^admin/', include(admin.site.urls)),
                   url(r'^accounts/auth/$', 'tbl.views.auth_view'),
                   url(r'^accounts/logout/$', 'tbl.views.logout'),
                   url(r'^profile/$', 'tbl.views.user_profile'),
                   url(r'^accounts/loggedin/$', 'tbl.views.loggedin'),
                   url(r'^accounts/invalid/$', 'tbl.views.invalid_login'),
                   url(r'^landinfo$', 'tbl.views.landpin_info'),
                   url(r'^simple-autocomplete/', include('simple_autocomplete.urls')),
                   url(dajaxice_config.dajaxice_url, include('dajaxice.urls')),
                )

我不知道出了什么问题。我按照Dajaxice的文档进行操作,但在运行应用程序时我又遇到了这个错误。

self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 10053] An established connection was aborted by the software in your host machine

2 个答案:

答案 0 :(得分:0)

dajaxice&#39;出了点问题&#39;错误消息可能由各种问题导致,包括python函数中缺少或拼写错误的参数名称或JavaScript函数中生成的异常。但是,您的示例非常简单。 python函数中没有命名参数,您没有提供JavaScript函数的代码。您的示例遵循我在自己的代码中调试和更正的类似问题的模式。

它与使用onclick处理程序提交按钮有关。我相信从提交按钮处理程序进行ajax调用会在服务器处理通过提交表单生成的POST请求的同时启动服务器上的异步活动。我相信服务器在完成对ajax调用的响应之前会看到POST请求,并且POST会抢占ajax调用,从而导致dajaxice错误消息。

调试和找到根本原因是相关的,但我广泛使用测试用例并且可以使用Safari浏览器和Django python开发服务器一致地重现行为。

浏览器和服务器都必须处理异步消息才能使ajax调用正常工作。对于允许这种抢占的服务器我可能是错的。相反,它可能是您的浏览器。无论如何,最终结果是一样的。

那你怎么避免这个问题呢?在我的例子中,我向表单添加了一个隐藏的输入元素,并将我用ajax发送的数据附加到该输入的值字段。然后,隐藏数据会与POST中的其他表单数据一起自动发送,并在您提交表单时自动生成。

还有其他解决方案:通过ajax提交所有表单数据并禁用表单数据的自动提交POST(Submitting HTML form using Jquery AJAX)。或者您可以使用一些与表单提交无关的事件,使用ajax将数据发送到服务器。

答案 1 :(得分:0)

您使用的是什么版本的Django?

Dajaxice是一个死的项目,并不适用于Django&gt; 1.5。 (见my other post。)