访问资源时 jQuery Ajax 失败 (Django Tastypie)

Posted

技术标签:

【中文标题】访问资源时 jQuery Ajax 失败 (Django Tastypie)【英文标题】:jQuery Ajax fails when accessing a resource (Django Tastypie) 【发布时间】:2012-07-07 19:06:56 【问题描述】:

我创建了一个简单的资源,通过 GET 输出我的 json 对象。 URL 是 http://127.0.0.1:8000/api/v1/advert/?format=json 并且工作正常。现在,当我尝试使用 jQuery ajax 方法访问资源时,我得到了;

这是我的 javascript

$.ajax(
        url : 'http://127.0.0.1:8000/api/v1/advert/',
        dataType : 'json',
        type : 'GET',
        data :  format: 'json' ,
        success : function(data) 
            console.log(data);
        
    );

这是什么原因造成的,更重要的是我该如何纠正它?当我尝试用一​​个简单的资源实现 Django Piston 时也会发生同样的错误,所以我猜这个问题更多地与实际的 AJAX 请求有关?

编辑。

我对 jQuery ajax 调用稍作调整,并包含了请求内容。

【问题讨论】:

你不应该使用 data 选项来包含 GET 参数(例如格式)吗? 嗨,我已经更新了 JS 代码,现在可以使用 data 参数。不幸的是,它仍然失败。 【参考方案1】:

经过多次挠头并尝试使用 curl 模拟错误后,我终于找到了问题的根源。我正在使用带有扩展 Adblock Plus (Adblock Plus (Beta) 1.2) 的 Google Chrome 浏览器。禁用此扩展后,ajax 请求工作正常!我不确定 ABP 究竟是如何影响它的,但它绝对是问题的根源。

【讨论】:

【参考方案2】:

我尝试了你的 ajax 代码,用于我自己的一个我知道正在工作的美味 API。

对于 jQuery ajax 命令最初发送的 OPTIONS 请求,我还得到一个“红色”结果行。如果我查看该请求的响应,我发现它实际上是 OK 200。

似乎 ajax 调用发出了 OPTIONS 请求,获得了 200 响应状态,然后取消了传输,因为它已经在“允许”响应标头中包含了所需的一切。

在您的情况下,它看起来实际上由于某种原因而失败(或者浏览器可能只是以不同的方式描述它?)。

你能添加你得到的响应头吗?

(我会分享我的屏幕截图,但我仍在完善我的代表:-/)

【讨论】:

您好,我已经用额外的屏幕截图更新了原始帖子,并稍微修改了 ajax 调用。它仍然失败(尽管略有不同 - 请求方法现在是 GET 而不是 OPTIONS)。也没有响应头信息,所以我认为 ajax 调用实际上并不存在?

以上是关于访问资源时 jQuery Ajax 失败 (Django Tastypie)的主要内容,如果未能解决你的问题,请参考以下文章

使用 jQuery 在失败时重试 AJAX 请求的最佳方法是啥?

填充最后一个输入时,JQuery ajax 调用失败

jQuery的ajax,当async为false时,同步操作失败。解决方式

Jquery .ajax():唯一的 AJAX 查询标识符?

错误:“CSRF 验证失败。请求中止。”在 Django 中使用 jquery ajax 时

Codeigniter (CSRF) jQuery ajax 问题