2010-01-11 4 views
1

У меня есть простой сценарий Ajax, который отлично работает в Chrome, Internet Explorer 8, Firefox 3.5.5, но не работает в Firefox 3.5.7. Код выглядит следующим образом:jQuery Ошибка ответа Ajax в Firefox 3.5.7

HTML-страницы:

<div> 
    <form> 
    <input id='button' type='button' value='click'> 
    </form> 
</div> 

<script> 
    $(document).ready(function(){ 
    $("#button").click(function(){ 
     $.ajax({ 
     type: "POST", 
     url: HTTP_HOST+"/ajax/ajax.php", 
     data: 'source=test', 
     dataType: 'html', 
     success: function(data) {alert('success: '+data);}, 
     error: function(XMLHttpRequest, textStatus, errorThrown){alert('fail:\n'+ 
                   textStatus+'\n'+ 
                   errorThrown+'\n' 
                   );} 
     }); 
    }); 
    }); 
</script> 

ajax.php Страница:

$sourcePage = $_POST['source']; 
if($sourcePage == 'test'){ 
    echo 'hello'; 
} 

Я получаю ожидаемый ответ (окно предупреждения говоря 'успех: привет') в которые я упомянул выше. В Firefox 3.5.7, однако, я получаю окно с сообщением «fail: error undefined».

Использование панели Firebug. Я вижу вызовы Ajax, и они получают значение ответа 200 OK, хотя он не может отличить размер ответа.

Нет других ошибок в соответствии с Firebug.

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

Как я могу решить эту проблему?

ответ

3

Я нашел, в чем проблема. В основном то, что происходило на моей странице HTML, имело адрес http://domain.com.au/testPage.php, но мой Ajax звонил http://www.domain.com.au/ajax.php. Должен быть какой-то тип безопасности, который жалуется, когда вы пытаетесь сделать вызов Ajax в другом домене?

Так что, если я получу доступ к странице http://www.domain.com.au/testPage.php, тогда она будет работать. Кроме того, если я изменю Ajax для вызова http://domain.com.au/ajax.php без www и сделаю звонок от http://domain.com.au/testPage.php, который также работает.

В основном убедитесь, что поддомен вашей страницы совпадает с поддоменем страницы, которую вы запрашиваете с помощью Ajax.

Это потенциально может быть большой проблемой для людей, которые этого не понимают, поскольку многие пакеты хостинга (например, мои) будут служить вам на той же странице с или без субдомена www по умолчанию. Таким образом, я могу получить доступ ко всем моим страницам с или без www и не заметить разницу (за исключением того, что Ajax не будет работать).

Похоже, что другие браузеры имеют те же проблемы, что означает, что это была страшная случайность, что каждый раз, когда я тестировал Firefox (на 5 различных системах) я как-то в конечном итоге пробуя URL без WWW :(

Мне нужно найти способ заставить всех использовать WWW-домен. Я считаю, что http://www.thesitewizard.com/apache/redirect-domain-www-subdomain.shtml#domaintosub - это то, что я ищу.

+0

О да, это сделало бы это. Вы изолированы от одиночного домена с помощью ajax, если вы не проксируете вызов. – prodigitalson

1

EDIT:

Попробуйте изменить dataType к 'text'.

попробовать это в ajax.php:

$sourcePage = isset($_POST['source']) ? $_POST['source'] : 'NO SOURCE'; 

if($sourcePage == 'test'){ 
    echo 'hello'; 
} 
else 
{ 
    echo $sourcePage; 
} 
+0

Пробовал это, но проблема все еще сохраняется. отлично, учитывая, что он работает в других браузерах. Похоже, что он не понимает ответ. – Dominic

+0

Правильно - вот почему я изменил ваш PHP. если вы получаете размер ответа 0, то ch ances php isnt выводят что-либо вообще, поэтому мой вывод по умолчанию '$ sourcePage'. Возможно, что thngs становятся искалеченными, так что '$ _POST ['source']' не существует. Возможно, FF3.5.7 испытывает проблемы с некоторыми вашими разметками или js. Попробуйте использовать 'empty()' instea 'isset()' a, если есть разница. – prodigitalson

+0

Извините, я должен был быть более ясным ранее. Когда я сказал, что он не может отличить размер ответа, я имел в виду, что он дает значение '?' в отличие от мышления, что файл равен 0 байтам. У меня есть else заявление, что echos 'brokenSource' в php-файле, поэтому он всегда должен выводить что-то. Кроме того, я пробовал dataType: текст, но проблема сохраняется. – Dominic

1

Я не уверен, если это имеет значение, но я всегда передаются данные в виде:

data: {source: 'test'} 

также вы проверили, что вы попадают в текст ответа XMLHttpRequest? В случае, если вы дадите какие-либо подсказки.

+0

Я этому не верю является проблемой, поскольку php работает нормально. Согласно документации jQuery, параметр данных «преобразуется в строку запроса, если не является уже строкой». Я считаю, что это означает, что ваш пример будет преобразован в нечто вроде того, что я использую, например, «источник» = тест « – Dominic

+0

@Dominic: вы правы, вы можете пройти в строку запроса вручную или объект, который будет конвертировать jQ для вас. Тем не менее, я всегда использую объектную нотацию. – prodigitalson

Смежные вопросы