我已经用尽了所有研究方法来解决这个问题,所以希望其他人会想到我没有做过的事情。
相对简单的设置,我有一个带有一些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('<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');
}
}
所有这些都在$(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>
答案 0 :(得分:2)
我刚刚解决了类似的问题,并且认为我会发布我的解决方案以防其他人使用它。
只有Firefox和Chrome显示空的ajax响应,因此它似乎是一个跨域问题,但所有内容都在同一个域中。
事实证明,'www。',我曾经多余而愚蠢地硬编码到我的ajax网址中。如果我一直在使用相对路径,一切都会好起来的。
我的测试网站在特定时刻打开为“http://domain.com”,没有“www。”,因此Firefox和Chrome将其视为不同的域名。导航到“http://www.domain.com”导致ajax调用在所有浏览器中工作。
所以,鉴于你写道:
url:'/ path / to / local / url'
..当我们不想透露我们的路径时,我不禁想知道你是否写了一条绝对的路径,就像我有......?
答案 1 :(得分:1)
我使用了您的源代码并设置了快速测试方案,但无法复制您的问题。在Firefox(3.6.3)和Chrome(5.0.375.70)中,它对我很有用。我在本地和远程服务器上都尝试过它。
所以你的代码很可能不会受到责备。但我也认为这通常不是与Chrome相关的问题。
Other people似乎已经遇到过这种情况。但是,更改内容类型对我的测试方案没有影响。当我将Content-Type
设置为image/jpeg
时,它甚至可以正常工作。
在JQuery forums某人表示不同的行为取决于他是在本地还是在远程服务器上运行他的应用程序。如果是这种情况,您可以比较HTTP请求和响应标头以跟踪问题。
答案 2 :(得分:1)
Chrome凭借本地文件安全性步入自己的脚,因此没有具有相对路径的AJAXing本地文件: http://code.google.com/p/chromium/issues/detail?id=47416