2016-08-09 2 views
0

JSON 응답을 구문 분석 할 수 없습니다 코드에서 나타난 바와 같이Ajax 요청이 내가 여기에 코드를 테스트하고

<!DOCTYPE html> 
<html> 
<head> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 
<script> 
$(document).ready(function(){ 
var processJSON = function(data, textStatus, xhr) { 
     alert(xhr.status); 
    } 
// for whatever reason, the following URL is not working any more, so you won't be able to test it anymore. 
    var myURL='https://ckeqt3eoea.execute-api.us-east-1.amazonaws.com/pettest/test?name=223'; 
// var myURL="https://jsonplaceholder.typicode.com/users" 

    $("button").click(function(){ 
     $.ajax({ 
      url: myURL, 
      dataType: "json", 
      contentType: 'application/json', 
      success: processJSON 
     }); 


    }); 
}); 
</script> 
</head> 
<body> 

<button>Send Request</button> 

</body> 
</html> 

을, 나는 구문 분석을 시도하고있다 이 URL의 응답 : https://ckeqt3eoea.execute-api.us-east-1.amazonaws.com/pettest/test?name=223

그리고 직접 해당 URL로 이동하여 AWS-API-Gateway의 응답이 단순히 것을 찾을 수 있습니다

{ 
"cc":"dd", 
"name":"ee" 
} 

위의 자바 스크립트를 사용하여 다른 소스의 다른 json 응답을 구문 분석 할 수있었습니다. 그러나 나는 위의 응답을 AWS-API-Gateway에서 파싱하려고 애 쓰고있다. var myURL의 두 번째 줄의 주석 처리를 제거하면 코드가 다른 URL에서 실제로 작동하는 것을 볼 수 있습니다. 기존 답변에 대한 응답으로

==========

는 :

  • 나는 jsonjsonp 모두를 시도했다. 둘 다 다른 URL (내가 언급 한 URL 포함)에서 작동했습니다. 그러나 어느 것도 AWS Gateway API에서 작동하지 않습니다.
  • 또한 명명 된 함수를 사용하도록 코드를 업데이트했습니다. 그러나 다시, 다른 URL에서는 작동하지만 AWS URL에서는 작동하지 않습니다.
  • Firefox 및 Safari에서 테스트했습니다.
+1

API가 현재 CORS를 지원하도록 구성되지 않았으므로 URL을 직접 입력하면 브라우저에 JSON이 인쇄되지만 다른 클라이언트 응용 프로그램에서 서버로 요청하면 요청이 거부되어 아무 것도 얻을 수 없다는 것을 설명합니다. 귀하의 데이터 개체입니다. AWS에서 CORS – Alex

답변

2

그것은 데이터 유형의 매립. 당신은 jQuery에게 jsonp 콜백을 기대한다고 말하고있다. 당신이 찾고있는 것은 dataType : "json"입니다.


UPDATE는

난 그냥 코드를 테스트했다. 문제는 pettest/test 리소스에 OPTIONS 메소드가 정의되어 있지 않다는 것입니다. API 게이트웨이 콘솔을 사용하여 테스트 리소스를 열고 (pettest가 스테이지이고 테스트가 리소스라고 가정) "동작"드롭 다운 버튼을 사용하여 CORS 사용을 설정합니다. 이렇게하면 자동으로 OPTIONS 메서드가 만들어지고 GET 메서드에 필요한 헤더가 설정됩니다.

+0

'jsonp'와'json'을 모두 시도했습니다. 두 URL 모두 내가 시도한 다른 URL에서 작동합니다.그러나 둘 다 AWS 게이트웨이 API 응답에 대해 작동합니다. – user2868104

+2

방금 ​​코드를 테스트했습니다. 문제는 pettest/test 리소스에 OPTIONS 메소드가 정의되어 있지 않다는 것입니다. API 게이트웨이 콘솔을 사용하여 테스트 리소스를 열고 (pettest가 스테이지이고 테스트가 리소스라고 가정) "동작"드롭 다운 버튼을 사용하여 CORS 사용을 설정합니다. 이렇게하면 자동으로 OPTIONS 메서드가 만들어지고 GET 메서드에 필요한 헤더가 설정됩니다. –

+0

고마워, 지금 일하고있다. 위 응답을 원래 응답에 추가 할 수 있습니까? 나는 그것을 정답으로 선택하고 싶다. – user2868104

0

API로 해결해주었습니다. 아마도 문제가되지는 않지만 변수 레이블에 'resp'를 사용하는 대신 '데이터'를 사용했습니다. 또한

명명 된 함수 호출이 아닌 함수 인라인

function processJSON(data) { 
     alert(data.name); 
    } 

      dataType: "json", 
      contentType: 'application/json', 
+0

을 받아들이도록 API를 설정했는지 확인하십시오. 여전히 작동하지 않습니다. 다시 말하지만, 귀하의 수정 및 원본 코드는 시도한 다른 URL은 물론 AWS URL에서도 작동합니다. (다른 URL 중 하나는 위의 코드 예'// var myURL'에 주석 처리되어 있습니다.) – user2868104

+0

URL을 호출했습니다. 브라우저에서 URL을 클릭하면 예상 한 JSON이 다시 나타 납니까? 이것을보십시오 :'alert (JSON.stringify (data, null, 4)); ' – Mike

관련 문제