PhoneGap 및 jQuery를 사용하는 도메인 간 요청이 작동하지 않음
안드로이드용 폰갭 앱을 만들고 있습니다.(원격) 서버에서 데이터를 얻기 위해 jQuery의 $.ajax() 함수를 사용하여 REST 호출을 합니다.다음과 같은 몇 가지 사항을 알고 있어야 합니다.
- 통화 유형은 POST여야 합니다.
- 서버에 JSON 데이터가 필요합니다(사용자 이름 및 암호 이상).
- 서버가 JSON 데이터를 다시 보냅니다.
코드:
function makeCall(){
var url = "http://remote/server/rest/call";
var jsonData ='{"username":"'+$('#username').val()+'","password":"'+$('#password').val()+'"}';
$.ajax({
headers: {"Content-Type":"application/json; charset=UTF-8"},
type: "POST",
url: url,
data: jsonData,
dataType: "json",
success: succesFunction,
error: errorFunction
});
}
하지만, 이것은 효과가 없습니다.Firebug를 사용하여 서버의 응답을 확인하면 아무것도 없습니다.TcpTrace를 사용하면 요청의 헤더를 볼 수 있습니다.예상된 POST 방법 대신 일부 이상한 헤더가 추가된 OPTIONS 방법이 있습니다.
OPTIONS /remote/server/rest/call HTTP/1.1
Host: localhost:8081
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:11.0) Gecko/20100101 Firefox/11.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: nl,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Origin: null
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type
Pragma: no-cache
Cache-Control: no-cache
교차 도메인 요청을 하는 것과 관련이 있다는 것은 알지만, 문제를 해결하는 방법을 모르겠습니다.몇 가지 방법을 시도해 보았지만 결과는 없었습니다.
- 'json' 대신 'jsonp'를 사용합니다.
- CORS(Cross-Origin Resource Sharing) 사용 시도
이 문제는 동일한 오리진 정책과도 관련이 있지만 PhoneGap이 로컬 html 파일을 로드하는 데 사용하는 file://protocol에는 적용되지 않습니다.
AndroidManifest.xml 파일에서 옵션은
<uses-permission android:name="android.permission.INTERNET" />
설정됩니다.
저는 지금 이틀 동안 이것을 고치려고 노력하고 있지만, 지금까지 결과가 없습니다.이것이 가능할까요?제가 다음 단계로 넘어갈 수 있는 팁이 있나요?
잘 부탁드립니다!
외부 도메인을 화이트리스트에 추가해야 합니다.xcode의 폰갭/코드명 목록 파일로 이동하여 새 항목을 추가하면 값이 *이고 외부의 모든 웹 사이트에 액세스할 수 있습니다.
또한 브라우저에서는 이 기능이 작동하지 않습니다.브라우저에는 전화 격차나 모바일 장치가 아닌 도메인 간 문제가 있습니다.
저는 혼자서 그 문제를 해결했습니다.문제는 제가 도메인을 추가해야 하는 URL에 있습니다.나는 변했어요
var url = "http://remote/server/rest/call";
로.
var url = "http://remote.mydomain.com/server/rest/call";
효과가 있습니다!
첫 번째 URL은 정확히 같은 URL과 설정으로 아이폰 앱에서 작동하기 때문에 작동해야 한다고 생각했습니다.또한 Windows 방화벽을 종료하는 이중 방화벽(Windows 및 ESET 방화벽)과도 관련이 있습니다.
어쨌든, 당신의 답변에 감사드립니다!
config.xml에 이것을 추가하면 저장됩니다.
<gap:plugin name="com.indigoway.cordova.whitelist.whitelistplugin" version="1.1.1" />
<access origin="*" />
<allow-navigation href="*" />
<allow-intent href="*" />
구글 맵과 원격 디버깅 툴을 포함하여 외부 리소스가 로드되지 않는 이유에 대해 당황했습니다.이게 절 구했어요!
를 설정해 보세요.dataType:jsonp
트세를 합니다.crossDomain:true
도메인 간 Ajax 요청의 경우 jsonp를 사용할 수 있습니다.http://api.jquery.com/jQuery.ajax/
아니면 콜백=을 추가할 수 있습니까?당신의 URL로.
JQuery 설정 :$support.dll = true;
언급URL : https://stackoverflow.com/questions/10173427/cross-domain-requests-using-phonegap-and-jquery-doesnt-work
'programing' 카테고리의 다른 글
Android에서 런타임에 dp 또는 dip 측면에서 화면 너비를 결정하는 방법은 무엇입니까? (0) | 2023.08.21 |
---|---|
Oracle의 Oracle BulkCopy 클래스입니다.ManagedDataAccess.dll? (0) | 2023.08.21 |
MySQL NULL 또는 NOT NULL 그게 질문입니까? (0) | 2023.08.21 |
한 달의 일 수 (0) | 2023.08.21 |
CSS 계산()에서 vh 빼기 픽셀을 사용할 수 있습니까? (0) | 2023.08.21 |