我正在使用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
答案 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。)