【问题标题】:Why an ajax call doesn't give .is_ajax()=True?为什么 ajax 调用不给出 .is_ajax()=True?
【发布时间】:2018-07-06 02:05:42
【问题描述】:

我的模板.html:

...
<button class="btn btn-success" onclick="save_post(event, 'publish')">Publish</button>
...

我的 javascript.js:

function save_post(event, action) {
  event.preventDefault();#new line
  var tag_string=document.getElementById('id_tags').value;
  if (action=='publish' || action=='draft') {
    var url_post='/blog/post/new/'
  } else {
    var url_post='/blog/post_edit/'
  };

  $.ajax({type: 'POST',
    url: url_post,
    data: {
      tagstring: tag_string,
      action: action
    },
    success: function (lista) {
        //code
    }
  });
};

我的意见.py:

@staff_member_required
def post_new(request):
    context_dict=[]
    if request.method == "POST":
        if request.is_ajax():
            #code
        ...

    else:
        form = PostForm()
    return render(request, 'blog/post_edit.html', context_dict)

我的url.py

app_name = 'blog'
urlpatterns = [
    ...
    path('post/new/', views.post_new, name='post_new'),
    path('post/<int:pk>/edit/', views.post_edit, name='post_edit'),
    ...

我的视图由 url(浏览器)调用,然后按钮调用 javascript 函数并再次调用(使用 ajax)相同的视图,这次使用 request.method = "POST" 并且这有效,但 request.is_ajax() 给出了 @987654328 @。

对于调用 post_edit(可能),我需要帖子的 id。我在哪里可以得到它? 我应该将它从模板传递给 save_post() 吗?

编辑:忽略下面的这些行

我也应该在某处使用preventDefault() 吗?

谢谢

编辑:现在我使用preventDefault(),但它给出了这个错误:

Not Found: /blog/post_new/
[26/Jan/2018 19:07:20] "POST /blog/post_new/ HTTP/1.1" 404 10871

并且 ajax 不会调用视图。编辑:我解决了这个问题,但我明天继续:)

【问题讨论】:

  • 如果你不使用preventDefault,那么一旦回调完成,浏览器仍然会提交表单(默认操作)。我的猜测是 request.is_ajax() 返回 False 的正是这个请求。
  • 在 save_post event.preventDefault();给出错误:未定义事件。我试过 save_post(event, publish) 但不起作用
  • 因为你没有参加活动
  • 好的,我通过了事件,但现在它说:未找到:/blog/post_new/ 并且未调用视图...
  • 如果您没有显示您的网址格式,我们如何帮助解决 Not Found 错误?

标签: javascript ajax django django-views


【解决方案1】:

你的Ajax代码有些问题,查看是否正确

我已附上我的代码附加图片和代码

$.ajax({
                type : 'POST', // define the type of HTTP verb we want to use (POST for our form)
                url  : 'myajaxview', // the url where we want to POST
                data :{
                    'csrfmiddlewaretoken': '{{csrf_token}}',
                    'text': text,
                    'search': search,
                    'email': email,
                    'url': url,
                    'telephone': telephone,
                    'password': password,
                    'number': number,
                },
                dataType : 'json', // what type of data do we expect back from the server
                encode   : true
            })

【讨论】:

  • 你对这个答案有什么问题
  • 我没有投反对票,但如果您解释什么是错误的以及您修复了什么,答案会更好。包括代码就够了,不需要截图。
  • 不是我的反对意见,但我无法为我制作你的代码。但我仍在努力
  • 你需要在你的数据和方法 dataType 中添加表单 csrf 令牌,因此我添加了代码错过了编码
  • 更多参考我的github项目github.com/gowthamand/…
猜你喜欢
  • 2019-10-06
  • 1970-01-01
  • 2020-12-11
  • 2021-10-18
  • 1970-01-01
  • 1970-01-01
  • 2014-11-05
  • 2017-12-10
  • 1970-01-01
相关资源
最近更新 更多