2012-04-16 1 views
3

내 애플리케이션의 HTML5, jQuery Mobile 프론트 엔드가 Java 서버 (Spring, Hibernate, MySQL)와 대화한다. 응용 프로그램은 품질 보증 환경뿐만 아니라 내 노트북에서도 잘 작동합니다. 품질 관리에서 서버의 IP 주소를 사용하여 애플리케이션에 액세스하고 있습니다. 라이브 환경 (QA와 동일한 서버이지만 Tomcat의 다른 웹 응용 프로그램)에서 응용 프로그램을 호스트하고 URL을 사용하여 도메인 이름에 액세스하려고하면 $ .ajax가 응용 프로그램 반환 오류를 호출합니다.도메인 이름 기반 URL을 통해 Java Spring 서비스에 액세스 할 때 jQuery .ajax 호출이 반환되는 오류

An error has occurred making the request: Error: NETWORK_ERR: XMLHttpRequest: Exception 101 

에서 :

An error has occurred making the request: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE)" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: http://www.smartcloudlearning.mobi/js/jquery-1.7.1.min.js :: <TOP_LEVEL> :: line 4" data: no] 

내가 크롬에서 다음과 같은 오류가 발생합니다 : 나는 파이어 폭스에서 다음과 같은 오류가

$.ajax({ 
    type : "GET", 
    url : "http://www.smartcloudlearning.mobi:9080/SmartCloudLearningMobi/rest/resource/getResourceTypes", 
    cache : false, 
    async : false, 
    dataType : 'json', 
    success : function(rTypes) { 
     Alert("success!"); 
    }, 
    error : function(XMLHttpRequest, textStatus, errorThrown) { 
     alert("An error has occurred making the request: " + errorThrown); 
    } 
}); 

을 다음과 같이 호출

하나는 서버 로그에서 요청한 Spring 서비스가 성공적으로 호출되었지만 클라이언트가받지 못한 것처럼 보입니다. 자료! 나는 URL

브라우저에서 직접
http://www.smartcloudlearning.mobi:9080/SmartCloudLearningMobi/rest/resource/getResourceTypes 

에 충돌하는 경우

, 나는 결과를 기대하세요! 아파치에서 Tomcat으로 서버 요청을 전달하는 방법 때문인지 알 수 있습니다. 다음

아파치/아파치 서버의 httpd.conf 파일의 라인은 다음과 같습니다

ProxyPass /SmartCloudLearningMobi http://www.smartcloudlearning.mobi:9080/SmartCloudLearningMobi 
ProxyPassReverse /SmartCloudLearningMobi http://www.smartcloudlearning.mobi:9080/SmartCloudLearningMobi 

사람이 어긋 나서 여기에 무엇을 말해 줄래? 매우 감사! 내 URL에 포트 번호를했기 때문에

이 브라우저는 아약스 호출 오류를주고 있었다 :

나는 문제를 해결하기 위해 관리. 내 QA URL에서 '실제'URL을 만들 때 포트 번호가 이월되었습니다. .ajax 호출의 URL에서 포트 번호를 제거하면 호출이 성공을 반환하기 시작했습니다!

제이슨 포글 리아 (Jason Foglia)의 성명서 "... 또한 포트 ..."는 그 앵글을 탐험하는 것을 느꼈습니다 ... 고마워요!

+1

아약스 전화 –

+0

URL에 오프닝 따옴표가 누락되었습니다. 죄송합니다 ... 코드에서이 게시물을 초안했을 때 내 오타였습니다. 실제 코드에는 여는 따옴표가 있습니다. –

답변

2

상대 URL을 사용해보십시오. URL과 포트와 동일한 도메인 이름이 작동하지 않으면 시도하십시오. 브라우저는 상호 도메인을 허용하지 않습니다.

$.ajax({ 
    type : "GET", 
    url : "/SmartCloudLearningMobi/rest/resource/getResourceTypes", 
    cache : false, 
    async : false, 
    contentType : "application/json" 
    dataType : 'json', 
    success : function(rTypes) { 
     Alert("success!); 
    }, 
    error : function(XMLHttpRequest, textStatus, errorThrown) { 
     alert("An error has occurred making the request: " + errorThrown); 
    } 
}); 
+0

이전에 크로스 도메인 문제에 대한 해결 방법을 사용했습니다. 나는 기본적으로 내 서버에 프록시를 설치했다. –

4

"동일한 원본 정책"이라는 보안 개념으로 인해 다른 도메인의 서비스를 호출 할 수 없기 때문에 오류가 발생했을 수 있습니다. 또는 적어도, 당신이 그 서비스에서 메소드를 호출하는 것을 금지하십시오.

같은 논의는 여기에서 발견된다 - AJAX Cross Domain

당신은 그러나 JSONP를 사용하여 크로스 도메인 구현할 수 있습니다 -이 솔루션은 JSONP로 데이터 유형을 변경하는 것입니다 Wikipedia on JSONP

:

$.ajax({ 
    url:"http://www.smartcloudlearning.mobi:9080/SmartCloudLearningMobi...", 
    dataType: 'jsonp', 
    ... 
}); 
+0

예, 가능하면 상대 URL을 사용하면 고통이 덜합니다.) –

0

브라우저를 오류가 발생했습니다.내 URL에 포트 번호가 있기 때문에 아약스 전화. 내 QA URL에서 '실제'URL을 만들 때 포트 번호가 이월되었습니다. .ajax 호출의 URL에서 포트 번호를 제거하면 호출이 성공을 반환하기 시작했습니다!

제이슨 포글 리아 (Jason Foglia)의 성명서 "... 또한 포트 ..."는 그 앵글을 탐험하는 것을 느꼈습니다 ... 고마워요!

관련 문제