【问题标题】:AJAX keep detecting failure but no errors showingAJAX 不断检测失败,但没有显示错误
【发布时间】:2017-02-03 14:08:55
【问题描述】:

我正在开发 chrome 扩展程序。目前,它只是检查用户是否存在。

插件弹出窗口中有一个表单。用户用他的用户名和密码填写此表格,并将其发送到服务器。

在视图中找到用户,一切看起来运行正常,但 AJAX 由于某种原因返回失败。

这是一个视图:

@csrf_exempt
def api_authentication(request):
    if request.method == 'POST':
        login = request.POST.get('login')
        password = request.POST.get('password')
        if login and password:
            username = login
            if '@' in login:
                username = mainapp_models.User.objects.get(email=login).username
                if not username:
                    return JsonResponse({'success':0})
            user = authenticate(username=username,password=password)
            print user # IT's ok, user is found
            if user:
                return JsonResponse({'username':user.username,
                                     'success':1})
    return JsonResponse({'success':0})

这是 AJAX:

$(document).ready(function () {

    $('#login-button-id').click(function () {

        var login = $('#input-email-id').val();
        var password = $('#input-password-id').val();
        $.ajax({
            url: 'http://127.0.0.1:8000/api/authenticate',
            type: 'POST',
            data: {
                'login': login,
                'password': password
            },
            success: function () {
                alert('success');
            },
            error: function () {
                alert('failure');
            }
        })
    })
});

JsonResponse 看起来像这样:{'username': u'milano', 'success': 1}

当我填写表格并发送数据时,找到了user,但警告“失败”。你知道是什么问题吗?

编辑:

提示安迪的回答:

由于console.log不起作用,我将其更改为警报:

error: function (jqXHR, textStatus, errorThrown) {
                alert("JQuery failed: " + textStatus + " with error thrown: " + errorThrown);
                alert(jqXHR.responseText);
            }

警报:

EDIT2

终于找到了一个控制台日志:

【问题讨论】:

  • 首先,您发布的代码中有一个拼写错误,uccess 而不是success。然后,当错误 callabck 被触发时,你会得到哪个错误?!
  • 我尝试使用以下答案中的代码检查错误。它没有记录任何内容,所以我将日志更改为警报。结果在问题的底部。
  • 我找到了控制台日志。我不得不点击插件 - 检查插件并摆脱所有警报,因为它们删除了检查窗口。我在问题底部添加了控制台日志。
  • 另一个骗子,更接近 Django:stackoverflow.com/q/37544602/934239

标签: jquery ajax django


【解决方案1】:

https://developer.chrome.com/extensions/xhr

查看此文档并检查您的权限是否已正确设置。

您需要将尝试通过 AJAX 请求访问的域添加到 manifest.json 中的“permissions”数组。比如:

permissions: [
 "http://127.0.0.1:8000/"
]

【讨论】:

    【解决方案2】:

    多一点调试会很方便。尝试更改您的 AJAX 错误函数以报告更多信息(不多,但有帮助):

    error: function(jqXHR, textStatus, errorThrown){
      console.log("JQuery failed: " + textStatus + " with error thrown: " + errorThrown);
      console.log(jqXHR);
      alert('AJAX failed. Check browser console for more info');
    }
    

    另外,您是否从开发服务器(./manage.py runserver)运行您的 django 应用程序?这样做并寻找任何有用的输出,如堆栈跟踪。可能就像 Python 代码中的拼写错误或被遗忘的导入一样简单

    【讨论】:

    • 哦,把浏览器控制台日志贴在这里,我们可以看到:)
    • 这就是问题所在,它没有向控制台写入任何内容。我正在实时检查...不知道为什么..
    • 嗯,没有大量的帮助。浏览器中的“开发者网络”选项卡作为响应提供了什么?
    • 网络标签不显示任何内容。它显示当前网页的东西而不是插件的东西。
    • 终于找到了正确的控制台。我已将其添加到问题的底部。
    【解决方案3】:

    另一个建议 - 仔细观察你的 Python 尝试改变:

    if user:
    

    if user is not None:
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-15
      • 2012-01-30
      • 2019-10-09
      • 1970-01-01
      • 1970-01-01
      • 2017-08-05
      相关资源
      最近更新 更多