2010-01-11 6 views
1

Chrome, Internet Explorer 8, Firefox 3.5.5에서는 완벽하게 작동하지만 Firefox 3.5.7에서는 실패하는 간단한 Ajax 스크립트가 있습니다.Firefox 3.5.7에서 jQuery Ajax 응답이 실패합니다.

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의 Net 패널을 사용하면 응답 크기를 구별 할 수 없지만 Ajax 호출을 볼 수 있고 응답 값 200 OK를 얻습니다.

방화범 정보에 따르면 다른 오류는 없습니다.

분명히 성공한 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를 변경하지 않고 www가없는 http://domain.com.au/ajax.php을 호출하고 http://domain.com.au/testPage.php에서도 전화를 걸 수 있습니다.

기본적으로 페이지의 하위 도메인이 Ajax에서 요청한 페이지의 하위 도메인과 동일한 지 확인하십시오.

이것은 내 호스팅과 같은 많은 호스팅 패키지가 기본적으로 www 하위 도메인이 있거나없는 동일한 페이지를 제공하기 때문에 이것을 모르는 사람들에게 큰 문제가 될 수 있습니다. 따라서 www가 있거나없는 내 모든 페이지에 액세스 할 수 있으며 차이점을 알 수 없습니다 (Ajax가 작동하지 않는다는 점을 제외하고는).

이 나타납니다 다른 브라우저는 I (5 개 서로 다른 시스템에) 파이어 폭스를 테스트 할 때마다 어떻게 든 www가 :(

없이 URL을 시도하고 결국 것을 끔찍한 우연을 의미 같은 문제가있는 것처럼

모든 사람들이 www 하위 도메인을 사용하도록 강요하는 방법을 찾아야합니다. http://www.thesitewizard.com/apache/redirect-domain-www-subdomain.shtml#domaintosub이 내가 찾고있는 것 같습니다.

+0

오 그래, 그럴거야 .. 당신은 프록시를하지 않는 한 당신은 아약스와 함께 하나의 도메인에 샌드 박스 화되어있다. – prodigitalson

1

편집 : 당신의 dataType'text'에 변화

보십시오.

는 ajax.php이 시도 :

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

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

시도했지만 문제가 계속됩니다. PHP 비트가 작동하는 것 같습니다. 괜찮아요 다른 브라우저에서 작동하는 것을 고려하십시오. 응답을 이해하지 못하는 것 같아요. – Dominic

+0

맞습니다 - 왜 내가 당신 PHP를 변경했다. 만약 당신이 0 응답 크기를 받고 ances는 php가 전혀 출력하지 않으므로'$ sourcePage'의 기본 출력입니다. 그것들은'$ _POST [ 'source']'가 존재하지 않도록 엉망이되고 있습니다. FF3.5.7에서 일부 마크 업 또는 js에 문제가있을 수 있습니다. 차이점이 있는지'isset()'의'empty()'instea를 사용해보십시오. – prodigitalson

+0

죄송합니다. 더 일찍 명확히해야했습니다. 내가 응답의 크기를 구별 할 수 없다고 말했을 때 나는 그것이 '?'값을 부여한다는 것을 의미했다. 파일이 0 바이트라고 생각하는 것과는 대조적입니다. 나는 항상 뭔가를 출력해야하므로 PHP 파일에서 'brokenSource'를 echo하는 else 문을 가지고 있습니다. 또한, 나는 시도했다 dataType : text하지만 문제가 지속됩니다. – Dominic

1

나는 그것이 중요 있는지 확실하지 않습니다하지만 난 항상 형태로 데이터를 전달했습니다 :

data: {source: 'test'} 

은 또한 당신이 선택이 무엇 XMLHttpRequest의 응답 텍스트를 받고 있습니까? 경우에 당신에게 어떤 단서를 제공합니다.

+0

나는 이것을 믿지 않는다. php가 잘 작동하는 것처럼 보이는 문제입니다. jQuery 문서에 따르면 데이터 옵션은 "이미 문자열이 아닌 경우 쿼리 문자열로 변환됩니다." 이것은 당신의 예제가 내가 사용하는 것과 같은 것으로 변환 될 것이라는 것을 믿습니다. 'source = test' – Dominic

+0

@Dominic : 수동으로 인코딩 된 쿼리 문자열이나 jQ가 변환 할 객체를 전달할 수 있습니다. 즉, 나는 항상 객체 표기법을 사용합니다. – prodigitalson