【问题标题】:ajax post request to viewajax post请求查看
【发布时间】:2017-10-30 16:07:48
【问题描述】:

我正在尝试向视图发出简单的 ajax 请求,但给定的 url 始终出现 not Found 错误:

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请求是否设置不正确?

【问题讨论】:

  • 请发布项目网址。

标签: ajax django django-views


【解决方案1】:

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

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

为此:

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

【讨论】:

  • 嗨@Gianmar。我意识到将 ulr 更改为 ./scan_ports/ 可以获取相对 url。 Not Found 错误仍然存​​在。
  • 嗨@Pierre,你能把完整的错误贴在这里吗?
  • Not Found: /myapp/start_session/1/scan_ports/ 并且js是从url/myapp/start_session/1加载的
  • 正确的 url 帖子是:/myapp/scan_ports,而不是 /myapp/start_session/1/scan_ports/
【解决方案2】:

首先检查你的网址,你发布的网址不正确,因此 404 not found 错误。

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

此外,这可能不是通过 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 所需的字典。

【讨论】:

    猜你喜欢
    • 2016-05-20
    • 1970-01-01
    • 1970-01-01
    • 2018-02-01
    • 2014-05-12
    • 2017-03-15
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    相关资源
    最近更新 更多