jQuery.ajax()无法向某些URL发送请求,但未向其他URL发送请求

时间:2013-03-28 20:40:59

标签: javascript ajax jquery

在我们的Rails应用程序中,我们有一个内联编辑功能,PUT将更改回服务器。 PUT的URL将根据正在编辑的对象类型/用户所在的页面而更改,但相同的JavaScript支持所有页面上的功能。我遇到了一个问题,即jQuery的AJAX请求有时会在没有触及服务器的情况下失败,除了“错误”之外,它们不会提供任何错误消息。我一直试图在控制台中调试它,但没有成功。非常奇怪的是,它似乎是由于传递给$.ajax()的URL中的某些内容导致了问题。

在控制台中,这可以按预期工作:

> errorCallback = function( jqxhr, status, err ){
    console.log( "Ajax call encountered an error: '" + status + "'" );
    console.log( jqxhr );
    console.log( err );
  };
> options = { type: 'PUT', error: errorCallback, data: { cerebro: true, name: 'cerebro-edit-span-2-title', pk: null, value: 'Test' }, url: '/staff/employees/2.json' };
> test1 = $.ajax( options );
> test1.readyState;
  4

所以我可以看到AJAX请求正常完成,没有触发错误回调,并且最终readyState为4。但现在请注意我是否只更改了URL的中间部分:

> options.url = '/staff/job_advertisements/2.json';
> test2 = $.ajax( options );
  Ajax call encountered an error: 'error'
  Object {readyState: 0, getResponseHeader: function, ... } // elided for clarity

X PUT http://localhost:3000/staff/job_advertisements/2.json        jquery.js:8527
> test2.readyState;
  0

使用这个不同的URL,AJAX调用在它甚至到达应用程序服务器之前就失败了!对开发计算机日志的检查显示,/staff/job_advertisements/2.json没有请求 - 也就是说,无法的问题是由于服务器返回500或404或其他错误代码,因为服务器甚至没有从浏览器接收请求。只是为了证明问题是客户端,而不是服务器端(并排除它与下划线有关的可能性)我尝试将URL设置为一些实际上在应用程序中不存在的无意义值:

> options.url = '/staff/jobadvertisements/2.json';
> test3 = $.ajax( options );
X PUT http://localhost:3000/staff/jobadvertisements/2.json 500 (Internal Server Error)    jquery.js:8527
  Ajax call encountered an error: 'error'
  Object {readyState: 4, getResponseHeader: function, ... } // elided for clarity

> test3.readyState;
  4
> options.url = '/staff/empl_oyees/2.json';
> test4 = $.ajax( options );
X PUT http://localhost:3000/staff/empl_oyees/2.json 500 (Internal Server Error)    jquery.js:8527
  Ajax call encountered an error: 'error'
  Object {readyState: 4, getResponseHeader: function, ... } // elided for clarity

> test4.readyState;
  4

在测试3和4中,我还在应用程序日志中看到请求,500状态代码和结果异常,而测试2中没有记录行(失败的情况)。因此,测试3和4表明请求路径不存在不是问题,因为当请求路径不存在时,错误消息包含500状态代码,readyState仍设置为4。他们还证明了下划线被禁止不是问题。

我已经在ajax()方法上搜索了jQuery的文档,我找不到任何帮助,所以... javascript / jQuery大师,我把这个留给你:这可能是一个URL的内容是什么导致jQuery AJAX请求在发送之前失败?更重要的是,我该如何解决这个问题?

1 个答案:

答案 0 :(得分:6)

您是否启用了AdBlock [Plus]?如果是这样,它会以静默方式阻止对包含advertisements的网址的所有请求。或者,似乎是_advertisements