Javascript jQuery$.ajax响应为空,但仅在Chrome中
我已经用尽了所有的研究方法来解决这个问题,所以希望其他人会想到一些我没有想到的东西 相对简单的设置,我有一个带有javascript的html页面,它向URL(在同一个域中)发出ajax请求。java web应用程序在后台执行其工作,并返回一个部分html页面(没有html、头或体标记,只有内容),该页面应插入页面中的特定点 所有这些听起来都很简单,我的代码可以在IE、Firefox和Safari中使用,但不能在Chrome中使用。在Chrome中,目标元素最终为空,如果我查看Chromes developer tools中的资源请求,响应内容也为空 所有这些都非常令人困惑,我已经尝试了无数的方法来解决它,我只是没有想法。任何帮助都将不胜感激Javascript jQuery$.ajax响应为空,但仅在Chrome中,javascript,jquery,ajax,google-chrome,Javascript,Jquery,Ajax,Google Chrome,我已经用尽了所有的研究方法来解决这个问题,所以希望其他人会想到一些我没有想到的东西 相对简单的设置,我有一个带有javascript的html页面,它向URL(在同一个域中)发出ajax请求。java web应用程序在后台执行其工作,并返回一个部分html页面(没有html、头或体标记,只有内容),该页面应插入页面中的特定点 所有这些听起来都很简单,我的代码可以在IE、Firefox和Safari中使用,但不能在Chrome中使用。在Chrome中,目标元素最终为空,如果我查看Chromes d
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('<div class="modal"><div class="indicator">Loading...</div></div>');
}
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');
}
}
var-container=$('#container');
$.ajax({
键入:“GET”,
url:“/path/to/local/url”,
数据:数据('parameters=value&另一个=value2'),
数据类型:“html”,
cache:false,
beforeSend:requestBefore,
完成:请求完成,
成功:成功,
错误:requestError
});
功能数据(参数){
var字典={};
变量对=参数。拆分('&');
对于(变量i=0;i
所有这些都在$(document).ready(function(){})中执行
干杯,
吉姆
@Oleg—请求的附加信息,ajax调用可能收到的响应示例
<p class="message error hidden">An unknown error occured while trying to
retrieve data, please try again shortly.</p>
<div class="timeline">
<a class="icon shuttle-previous"
rel="max_id=16470650733&page=1&q=something">Newer Data</a>
<a class="icon shuttle-next"
rel="max_id=16470650733&page=3&q=something">Older Data</a>
</div>
<ol class="social">
<li class="even">
<div class="avatar">
<img src="sphere_normal.gif"/>
</div>
<p>
Some Content<br/>
<span class="published">Jun 18, 2010 11:29:05 AM</span> - <a
target="_blank" href="">Direct Link</a>
</p>
</li>
<li class="odd">
<div class="avatar">
<img src="sphere_normal.gif"/>
</div>
<p>
Some Content<br/>
<span class="published">Jun 18, 2010 11:29:05 AM</span> - <a
target="_blank" href="">Direct Link</a>
</p>
</li>
</ol>
<div class="timeline">
<a class="icon shuttle-previous"
rel="max_id=16470650733&page=1&q=something">Newer Data</a>
<a class="icon shuttle-next"
rel="max_id=16470650733&page=3&q=something">Older Data</a>
</div>
一些内容
2010年6月18日上午11:29:05-
更新的数据
旧数据
我获取了您的源代码并设置了一个快速测试场景,但未能复制您的问题。它在Firefox(3.6.3)和Chrome(5.0.375.70)中都能正常工作。我在本地和远程服务器上都试过了
因此,您的代码很可能不会受到责备。但我也认为,这通常不是一个与Chrome相关的问题
但我似乎遇到了这个问题。不过,更改内容类型在我的测试场景中没有任何效果。当我将内容类型设置为图像/jpeg
时,它甚至可以工作
在服务器上,有人指出了不同的行为,这取决于他是在本地运行应用程序还是在远程服务器上运行应用程序。如果您是这样的话,您可以比较HTTP请求和响应头来跟踪问题。我刚刚解决了一个类似的问题,我想我会发布我的解决方案,以防它对其他人有用
只有Firefox和Chrome显示了一个空的ajax响应,因此这似乎是一个跨域问题,但所有内容都在同一个域上
事实证明,“www.”是我多余而愚蠢地硬编码到我的ajaxurl中的罪魁祸首。如果我使用相对路径,一切都会很好
在那个特定的时刻,我的测试站点以“”的形式打开,没有“www”,因此Firefox和Chrome将其视为一个不同的域。导航到“”导致ajax调用在所有浏览器中都工作
所以,考虑到你写的:
url:“/path/to/local/url”
…按照惯例,当我们不想公开我们的路径时,我不禁想知道,事实上你是否编写了一个绝对路径,就像我写的那样…?Chrome在本地文件安全性方面独辟蹊径,因此没有将本地文件与相对路径相关联:
您是否在本地运行此程序?是的,Nick所有这些程序都在Java web应用程序下运行,目前在我的本地计算机上也是如此@roguepixel-为了进行快速测试,请尝试在命令行上使用--禁用web安全
选项运行chrome,结果相同?@Nick,是的,结果相同,不久前,我在一个类似的问题上发现了这个问题。@roguepixel-有趣的是,空的回答看起来像是跨域被阻止了,但这应该可以解决它…作为一个测试,当然不是一个解决方案(当你尝试它时,你是否关闭了所有的chrome窗口?),我将进一步查看请求和响应标题。你救了我一天!我刚刚在Chrome 8.0.552.237中尝试了AJAX调用
-使用相对路径“bin/test.php”(服务器在我的本地网络中)->它工作正常
-使用绝对路径“”(服务器在我的本地网络中)->它不工作
谢谢!