ajax发布请求查看

时间:2017-10-30 16:07:49

标签: ajax django django-views

我正在尝试向视图发出一个简单的ajax请求,但是对于给定的网址仍然存在“未找到”错误:

Not Found: /myapp/start_session/1/scan_ports/
"POST /myapp/start_session/1/scan_ports/ HTTP/1.1" 404 5711

JS

$(document).ready(function() {
        $.ajax({
            method: 'POST',
            url: 'scan_ports/',
            data: {'csrfmiddlewaretoken': '{{csrf_token}}'},
            success: function (data) {
                 alert("OK!");
            },
            error: function (data) {
                 alert("NOT OK!");
            }
        });
    });

网址

url(r'^scan_ports/$',views.ScanPorts,name='scan_ports'),

查看

 @login_required
    def ScanPorts(request):
        user = request.user
        if request.method == 'POST':
            currentSetting = models.UserSetting.objects.filter(isCurrent=True)
            if currentSetting.serialPort:
                print("GOT IT!")
            return HttpResponse('')

ajax请求设置不正确吗?

2 个答案:

答案 0 :(得分:0)

假设您在“myapp”应用中,请替换:

method: 'POST',
url: 'scan_ports/',

为此:

method: 'POST',
url: '/myapp/scan_ports/',

答案 1 :(得分:0)

首先检查您的网址,您发布的网址不正确,因此找不到404错误。

尝试在您的JS中定义您的网址:{%url' scan_ports' %}将使用您在urls.py中提供的名称搜索您的网址

此外,这可能不是通过ajax提交表单的好方法。

你的JS应该是这样的:

$('.form-class-name').on('submit', function (e) {

    e.preventDefault(); 
    console.log("ajax is called");

    $.ajax({
        type: $(this).attr('method'),
        url: "/url-name/",
        data: $(this).serialize(),
        dataType: 'json',

        success: function(data) {
                alert("success");
            },
        error: function(data) {
                alert("Failure");
            }
            })
        }
  • e.preventDefault()会阻止自然/默认操作,并阻止提交表单两次。
  • .serialize(),以json格式序列化表单数据。
  • 追加" /"你的行动之前和之后的网址。

您的视图必须返回字典,因为ajax处理JSON格式。

像这样编辑您的视图:

if request.method == "POST":
    currentSetting = models.UserSetting.objects.filter(isCurrent=True)
        if currentSetting.serialPort:
            print("GOT IT!")
            a = {'data':'success'}
    return HttpResponse(json.dumps(a)) 

这将返回ajax所需的字典。