2014-03-05 2 views
3

jquery $ .ajax를 사용하여 webservices에 대한 일반적인 호출을 설정하려고합니다. 원시 데이터를 다시 가져 와서 그리드에 바인딩 할 수 있어야합니다.

dataType을 알았을 때 올바르게 작동하는 호출이 있지만 데이터 유형을 알지 못하는 사이에 ajax 호출을 시도하고 싶습니다. 구체적으로 dataType이 무엇인지 찾으려고합니다.

예를 들어, 데이터 유형을 알고 내 아약스 호출 될 수있다 :

$.ajax({ 
    type: 'GET', 
    crossDomain: true, 
    dataType: "jsonp", 
    url: 'http://itunes.apple.com/search?term=coldplay', 
    success: function (res, status, xhr) { 
     //DoStuff; 
    }, 
    error: function (jqXHR, textStatus, errorThrown) { 
     //DoStuff 
    } 
}); 

하지만 단순히 "오류"의 응답 상태를 얻을 데이터 유형을 알 수없는 요청을 언제?

내가 결국이 작업을 수행하려면 json, xml 또는 odata (거의없는)를 반환하는 url (webservice)을 ping하는 것이 좋습니다. 나는 어느 것을 알지 못하기 때문에 단순히 어떤 url에 대한 호출을 만들어서 어떤 종류의 데이터와 어떤 content-type을 찾을 수 있는지 알고 싶습니다.

나는 단순히 오류의 헤더에서 콘텐츠 유형을 다시 가져 오려고했지만 지금까지 아무 것도 시도하지 않았거나 아무 것도 반환하지 않았습니다.

$.ajax({ 
    type: 'GET', 
    crossDomain: true, 
    url: 'http://itunes.apple.com/search?term=coldplay', 
    success: function (res, status, xhr) { 
     //DoStuff 
    }, 
    error: function (jqXHR, textStatus, errorThrown) { 
     $("#results").html(textStatus + jqXHR.getResponseHeader('Content-Type')); 
    } 
}); 

Jquery로도이 작업을 수행 할 수 있습니까?

편집

나는이 (대부분의 경우에한다) 서버 측을 수행 할 수 있습니다, 모든 가능성에 이런 일이 끝날 것이라고 알고 있습니다. 하지만 내 데이터 유형을 모른 채 데이터 소스 clientside에 그리드를 바인딩 할 수있는 방법을 찾기 위해 위의 질문이 탄생했습니다.

시간 내 주셔서 감사드립니다.

+0

왜 데이터 유형을 알 수 없습니까? 어떤 것이 든, 당신의 요청은 당신이 * 돌려 주길 원하는 데이터의 종류를 지시해야합니다. –

+0

예 : 내 사이트는 데이터를 소비하고 사용자에게 표시/정렬합니다. webservices에서 내 데이터를 가져 오면 해당 webservice가 xml 또는 json을 반환 할 수 있습니다. 나는 정말로 신경 쓰지 않는다. 나는 그것을 표시 할 필요가있다. 가능한 경우에만 궁금해. – Blunderfest

+0

서비스와 함께 'content-type'을 반환하도록 변경하면 어떻게 될까요? '{contentType : 'json', data : []}' –

답변

3

사용자의 접근 방식은 타당하지만 타사 웹 서버에서 정보를 가져 오도록 요청하는 것입니다.

http://itunes.apple.com/search?term=coldplay을 XMLHttpRequest에서로드 할 수 없습니다. 'Access-Control-Allow-Origin'헤더가 요청 된 리소스에 없습니다. 따라서 원점 'http://fiddle.jshell.net'은 액세스 할 수 없습니다.

타사가 사용자에게 허가하지 않는 한 Same Origin Policy은 응답에 대한 모든 정보에 JavaScript가 액세스하지 못하게합니다.

논리 서버 측을 이동해야합니다.

+0

Ajax 호출에 contenttype을 넣었을 때이 값이 성공적으로 사용 되었기 때문에 결과를 표시 할 수 있으므로 여기에서 무엇을 의미하는지 확신 할 수 없습니다. 피들러로도 접속할 수 있습니까? – Blunderfest

+0

@Malcoda - 아니요. JSON-P를 사용하도록 jQuery에 지시하면 XHR 요청 대신 JSON-P 요청을합니다. JSON-P는 동일한 출처 정책의 대상이 아닙니다. JS에서 작성한 JS가 다른 서버의 데이터에 액세스하는 것은 아니지만 코드를 호출하는 다른 서버의 스크립트 (예 : 역방향)를 추가합니다. 서버가 JSON-P를 지원하는 경우에만 작동합니다 (이 답변의 마지막 두 번째 단락에서 언급 한 권한을 부여하는 수단 임). – Quentin

+1

(JSON-P를 지원 *하는 경우 JSON-P가 아닌 JSON, XML 또는 odata로 인코딩됩니다) – Quentin

관련 문제