2013-01-03 3 views
18

JQuery를 사용하여 JSONP 요청을하는 API 클라이언트가 있습니다. SSL을 사용하면이 API 클라이언트가 SSL을 사용하지 않을 때 모든 것이 제대로 작동하지만 이 실패합니다. 나는 URL을 예를 들어HTTP 대신 https를 사용하면 JSONP 요청이 실패합니다.

http://apiclient.com 내가이 도메인 JSONP 요청 다음 만드는 중이라서 :

$.ajax({ 
    url: url, 
    dataType: "jsonp", 
    contentType: "application/json; charset=utf-8", 
    success: function(data) 
    { 
     $.each(data.services, function(index, service) { 
      processService(service); 
     }); 
    } 
}); 

내가 URL에 지정된 API 호스트로 만들어진 적절한 요청을 참조 성공의 콜백 함수가 제대로 형식이 지정된 데이터가 전달되면 제대로 호출됩니다.

그러나 API 클라이언트의 위 URL을 https://apiclient.com으로 변경하면 API 호스트에서 요청을받지 못합니다. 로그 양쪽에 오류가 표시되지 않습니다.

참고 : 유일한 차이점은 API 클라이언트 측 HTTPSHTTP입니다.

https 도메인을 사용할 때 JSONP 요청을 다르게 처리해야합니까?

감사합니다.

편집 : 이 문제는 Chrome에서만 발생합니다. Firefox와 Safari에서 작동합니다. 그러나 나는 암호화 된 사이트 에서 암호화되지 않은 요청을하려고하는지 묻는 FireFox에 대한 빠른 경고를 받았습니다. 나는 그것을 허용했고 결코 다시 경고를 보지 못했다.

+3

서버가 Https 요청을 수락하도록 구성되어 있습니까? 아약스 쿼리에 오류 함수를 추가하고 오류가 있는지 확인하십시오. – ryadavilli

+2

https API URL을 정상적으로 호출 할 수 있습니까? 어쩌면 인증서 오류 또는 뭔가있어? – AndreKR

+1

@ryadavilli 아니요 'jsonp'요청에 대한 AJAX 오류 처리기입니다. docs ** 참고 :이 처리기는 도메인 간 스크립트 및 JSONP 요청에 대해 호출되지 않습니다. ** – charlietfl

답변

11

해결책을 찾았습니다. 문제는 JQuery 및 기타 리소스가 비보안 사이트에서 가져온 것입니다. 해결책은 https에서 참조하는 것이 었습니다.

1

http 및 https에 대한 JSONP 요청에 다른 내용이 있어서는 안됩니다.

대신 우리를 .getJSON보십시오 :

$.getJSON(url, function(data) { 
    $.each(data.services, function(index, service) { 
     processService(service); 
    }); 
}); 

크로스 브라우저 문제지만 jQuery.getJSON() 추가 정보를 jQuery를 사이트에서 표정으로하지 않는 경우가 발생합니다 jQuery.ajax()를 사용하여 : http://api.jquery.com/jQuery.getJSON/

이 문제와 유사한 포스트있다

: JSONP To Acquire JSON From HTTPS Protocol with JQuery

+1

$ .getJSON은 $ .ajax의 짧은 손으로 동작이 동일합니다. – Mayumi

1

프로토콜을 변경하면 URL의 다른 부분을 변경하는 것과 같은 효과가있다 - 그것은 동일 출처 정책과 forc의 위반을 트리거가 크로스 도메인 모드로 전환합니다. 이미 도메인 간 액세스가 작동하는 경우 http를 사용했을 때와 마찬가지로 https에서도 계속 작동합니다.

당신은 예를

$.getJSON('ajax/test.json', function(data) { 
    $('.result').html('<p>' + data.foo + '</p>' 
    + '<p>' + data.baz[1] + '</p>'); 
}); 

검사 완료해서 getJSON 문서 http://api.jquery.com/jQuery.getJSON/

에 대한해서 getJSON를 사용할 수 있습니다 내가 Juqery.ajax 크로스 브라우저 문제를 야기하지만 jQuery로한다 사용 ... 잘못 것입니다.해서 getJSON

여기

http://docs.jquery.com/Release:jQuery_1.2/Ajax#Cross-Domain_getJSON_.28using_JSONP.29

는 크로스 도메인의 예는 JSON을 얻을 수있다

난 당신이

$.getJSON('ajax/test.json',{}, function(data) { 
    $('.result').html('<p>' + data.foo + '</p>' 
    + '<p>' + data.baz[1] + '</p>'); 
}); 
같은 요청을 보내는 경우가 해결 될 것입니다 알고

파이어 폭스, HTTPS에 문제가있다

는 soruce 내가 희망 AJAX https POST requests using jquery fail in Firefox

을하는 데 도움이
+0

제 첫 번째 경우에는 http없이 작동하며 https에서는 작동하지 않습니다. 따라서 동일한 출처 정책은 여기에 문제가되지 않으며 POST가 아니라 GET을 사용하고 있습니다. 나는 $ .getJSON이 설명서에 언급 된 $ .ajax에 대한 짧은 손이라고 생각한다. 당신의 솔루션은 문제를 해결하지 못합니다. – Mayumi

+0

나는 문제가 될 수 있다고 생각하는 것은 HTTP와 HTTPS에 대해 반환되는 데이터가 동일하지 않다는 것이다. 그렇다면 HTTP 및 HTTPS 프로토콜을 모두 사용하여 Content-Type을 application/json으로 지정하여 피 들러에서 URL을 가져 오십시오. 그런 다음 두 프로토콜의 결과를 비교하십시오. – stack247

관련 문제