Я исчерпал все возможности исследования, чтобы решить эту проблему, так что, надеюсь, кто-то еще придумает что-то, чего я просто не сделал.

Относительно прямолинейная настройка, у меня есть html-страница с некоторым javascript, который делает ajax-запрос к URL-адресу (в том же домене), java-приложение в фоновом режиме делает свое дело и возвращает частичную html-страницу (без html, head или body) теги, только содержимое), которые должны быть вставлены в определенный момент на странице.

Все звучит довольно просто, и код, который у меня есть, работает в 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>
9
ROGUE 18 Июн 2010 в 14:24

3 ответа

Лучший ответ

Chrome встал на ноги с безопасностью локальных файлов, поэтому нет AJAXing локальных файлов с относительными путями: http://code.google.com/p/chromium/issues/detail ? ID = 47416

1
JustAMartin 17 Окт 2010 в 10:05

Я только что решил похожую проблему и решил опубликовать свое решение на случай, если оно пригодится кому-то еще.

Только Firefox и Chrome показывали пустой ajax-ответ, так что это казалось междоменной проблемой, но все было в одном домене.

Оказалось, что виноват «www.», Который я излишне и глупо жестко запрограммировал в своем URL-адресе ajax. Если бы я использовал относительный путь, все было бы хорошо.

В тот момент мой тестовый сайт был открыт как "http://domain.com" без 'www. Firefox и Chrome рассматривали его как отдельный домен. Переход к «http://www.domain.com» привел к тому, что вызов ajax работал во всех браузерах.

Итак, учитывая, что вы написали:

Url: '/ path / to / local / url'

... поскольку это соглашение, когда мы не хотим раскрывать наши пути, я не мог не задаться вопросом, действительно ли вы написали абсолютный путь, как я ...?

2
Matheson 11 Сен 2010 в 21:38

Я взял ваш исходный код и настроил сценарий быстрого тестирования, но не смог воспроизвести вашу проблему. У меня это отлично работает как в Firefox (3.6.3), так и в Chrome (5.0.375.70). Я пробовал это как локально, так и на удаленном сервере.

Так что ваш код, скорее всего, не виноват. Но я также думаю, что это вообще не проблема Chrome.

Кажется, что другие люди сталкивались это хотя. Изменение типа контента не повлияло на мой тестовый сценарий. Это даже работает, когда я устанавливаю Content-Type в image/jpeg.

На форумах JQuery кто-то указал различное поведение в зависимости от того, запускает ли он свое приложение локально или на удаленном сервере. Если это так, вы можете сравнить HTTP-запрос и заголовки ответа, чтобы отследить проблему.

1
Der Hochstapler 22 Июн 2010 в 18:52