programing

PhoneGap 및 jQuery를 사용하는 도메인 간 요청이 작동하지 않음

topblog 2023. 8. 21. 19:25
반응형

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

교차 도메인 요청을 하는 것과 관련이 있다는 것은 알지만, 문제를 해결하는 방법을 모르겠습니다.몇 가지 방법을 시도해 보았지만 결과는 없었습니다.

이 문제는 동일한 오리진 정책과도 관련이 있지만 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

반응형