Javascript Ajax返回完整页面

Javascript Ajax返回完整页面,javascript,python,jquery,ajax,django,Javascript,Python,Jquery,Ajax,Django,Ajax返回整个页面,而不是输入的返回值。Ajax和Django不能正常工作。它必须是一个单页web应用程序。我试图为Calc制作一个单独的页面模板,但没有成功 url.py urlpatterns = [ url(r'', views.main, name = 'main'), url(r'calc/$', views.calc, name = 'calc') ] def main(request): return render(request, 'main/inde

Ajax返回整个页面,而不是输入的返回值。Ajax和Django不能正常工作。它必须是一个单页web应用程序。我试图为Calc制作一个单独的页面模板,但没有成功

url.py

urlpatterns = [
    url(r'', views.main, name = 'main'),
    url(r'calc/$', views.calc, name = 'calc')
]
def main(request):
    return render(request, 'main/index.html',
context = {
    'some': some
    }
)

def calc(request):
    if request.GET:
        outputdata = request.GET('somedata')
        return HttpResponse(outputdata)
视图.py

urlpatterns = [
    url(r'', views.main, name = 'main'),
    url(r'calc/$', views.calc, name = 'calc')
]
def main(request):
    return render(request, 'main/index.html',
context = {
    'some': some
    }
)

def calc(request):
    if request.GET:
        outputdata = request.GET('somedata')
        return HttpResponse(outputdata)
index.html

...
<div>
    <form action="{% url 'calc' %}" method="GET">
        {% csrf_token %}
        <input type="text" id="someinput" value="somevalue">
    </form>
    <button type="submit" id="somebutton">Button</button>
</div>
...
警报

感谢所有回应者。

解决方案是使用路径而不是url

path('', views.main, name = 'main'),
path('calc/', views.calc, name = 'calc')

并写入outputdata=request.GET.GET('somedata'),而不是outputdata=request.GET('somedata')。

问题可能是您的主URL模式与所有内容都匹配。因此,当您发出Ajax请求时,它由返回完整页面的视图提供服务,而不是返回单个值的视图

确保使用起始和终止锚定:

url(r'^$', views.main, name = 'main'),
url(r'^calc/$', views.calc, name = 'calc')
或者使用新的路径语法:

path('', views.main, name = 'main'),
path('calc/', views.calc, name = 'calc')
你用退货吗

HttpResponse(outputdata) 
但是你需要使用

from django.http import JsonResponse 

return JsonResponse({"foo":"bar")
所以导入JsonResponse并将HttpResponse更改为JsonResponse

def calc(request):
    if request.GET:
        outputdata = request.GET('somedata')
        return JsonResponse({"outputdata":outputdata}, safe=False)

“不起作用”是什么意思?发生了什么事?@roganjosh“Ajax返回完整页面”而不是
request.GET('somedata')
onlyn根本不清楚预期的行为是什么。花几分钟来帮助他人阅读AJAX调用,因为它们通常不会返回整个HTML页面。相反,AJAX背后的思想是返回页面的部分内容(一些您感兴趣的数据)。然后通常使用JavaScript将该数据注入页面。@Andreas但这是否是期望的行为?这篇文章说“它必须是一个单页应用程序”。为什么代码接受请求并立即将其发送回?当然这还不清楚,也许更好。但是如果我在错误成功的情况下写了这个:function(data){alert(data);},error:function(data){alert('error');}alert显示一个错误。谢谢。如果再加上另一个答案,这就是工作。没有更改。@SergeiPopov try outputdata=request.GET.GET('somedata')或outputdata=request.GET[somedata']没有任何更改。request.GET.GET('somedata')对我有帮助。谢谢