jQuery $ .ajax响应为空,但仅限Chrome

我已经用尽了所有研究方法来解决这个问题,所以希望其他人会想到我没有做过的事情。

相对简单的设置,我有一个带有一些javascript的html页面,它对URL(在同一个域中)发出ajax请求,后台的java web应用程序执行其操作并返回部分html页面(没有html,头部或正文)标签,只是内容)应插入页面中的特定点。

一切听起来都很简单,我在IE,Firefox和Safari中使用的代码,但在Chrome中却没有。 在Chrome中,目标元素最终为空,如果我查看Chromes开发人员工具中的资源请求,则响应内容也为空。

一切都非常令人困惑,我已经尝试了无数的东西来解决它,我只是出于想法。 任何帮助将不胜感激。

var container = $('#container'); $.ajax({ type: 'GET', url: '/path/to/local/url', data: data('parameters=value&another=value2'), dataType: 'html', cache: false, beforeSend: requestBefore, complete: requestComplete, success: requestSuccess, error: requestError }); function data(parameters) { var dictionary = {}; var pairs = parameters.split('&'); for (var i = 0; i < pairs.length; i++) { var keyValuePair = pairs[i].split('='); dictionary[keyValuePair[0]] = keyValuePair[1]; } return dictionary; } function requestBefore() { container.find('.message.error').hide(); container.prepend(''); } function requestComplete() { container.find('.modal').remove(); } function requestSuccess(response) { container.empty(); container.html(response); } function requestError(response) { if (response.status == 200 && response.responseText == 'OK') { requestSuccess(response); } else { container.find('.message.error').fadeIn('slow'); } } 

所有这些都在$(document).ready(function(){})中执行;

干杯,吉姆

@Oleg – 请求的附加信息,ajax调用可能收到的响应示例。

     

Chrome凭借本地文件安全性步入自己的脚,因此没有具有相对路径的AJAXing本地文件: http : //code.google.com/p/chromium/issues/detail? id = 47416

我刚刚解决了类似的问题,并且认为我会发布我的解决方案以防其他人使用它。

只有Firefox和Chrome显示空的ajax响应,所以它似乎是一个跨域问题,但一切都在同一个域上。

事实certificate,’www。’,我曾经多余而愚蠢地硬编码到我的ajaxurl中,这是罪魁祸首。 如果我一直在使用相对路径,一切都会好起来的。

我让我的测试网站在那个特定时刻打开为“ http://domain.com ”,没有“www。”,因此Firefox和Chrome将其视为不同的域名。 导航到“ http://www.domain.com ”导致ajax调用在所有浏览器中工作。

所以,鉴于你写道:

url:’/ path / to / local / url’

..as是我们不想透露我们的路径的惯例,我不禁想知道你是否写了一条绝对的路径,就像我有……?

我使用了您的源代码并设置了快速测试方案,但无法复制您的问题。 在Firefox(3.6.3)和Chrome(5.0.375.70)中,它对我很有用。 我在本地和远程服务器上都尝试过它。

所以你的代码很可能不会受到责备。 但我也认为这通常不是Chrome相关问题。

其他人似乎也遇到过这种情况。 但是,在我的测试场景中更改内容类型没有任何影响。 它甚至可以在我将Content-Type设置为image/jpeg

在JQuery论坛上,有人表示不同的行为取决于他是在本地还是在远程服务器上运行他的应用程序。 如果是这种情况,您可以比较HTTP请求和响应标头以跟踪问题。