JSONP 요청 처리 오류
ajax jsonp 요청을 하고 있는데 오류 처리가 작동하지 않습니다.요청이 404 또는 500이면 오류를 처리할 수 없습니다.
답을 찾으려고 주위를 둘러봤지만 아무것도 찾을 수가 없어요.http://code.google.com/p/jquery-jsonp/,에 솔루션이 있는 것 같습니다만, 사용 방법의 예를 찾을 수 없습니다.
function authenticate(user, pass) {
$.ajax ({
type: "POST",
url: "url",
dataType: 'jsonp',
async: false,
//json object to sent to the authentication url
data: {"u": userid, "p": pass},
success: function (data) {
//successful authentication here
console.log(data);
},
error: function(XHR, textStatus, errorThrown) {
alert("error: " + textStatus);
alert("error: " + errorThrown);
}
})
}
jQuery.ajax() 문서를 참조하면 다음 정보를 볼 수 있습니다.
에러
요청이 실패했을 때 호출되는 함수(...) 참고:교차 도메인 스크립트 및 교차 도메인 JSONP 요청에는 이 핸들러가 호출되지 않습니다.이건 Ajax 이벤트입니다.
그래서 어쩔 수 없이 회피책을 찾아야 합니다.에러 콜백을 트리거 하는 타임 아웃을 지정할 수 있습니다.즉, 지정된 기간 내에 요청이 정상적으로 완료되어야 합니다.그렇지 않으면 실패했다고 가정합니다.
$.ajax({
...
timeout: 5000, // a lot of time for the request to be successfully completed
...
error: function(x, t, m) {
if(t==="timeout") {
// something went wrong (handle it)
}
}
});
코드의 다른 문제...
JSONP(여기와 여기를 참조)를 사용하여 오리진 정책의 제약을 극복할 수 있지만, JSONP(대신 CORS 참조)를 사용하여 POST할 수 없습니다.그렇게 동작하지 않기 때문입니다.이것은 GET 요구를 통해 데이터를 가져오는 요소가 작성됩니다.JSONP 솔루션은 XmlHttpRequest 개체를 사용하지 않기 때문에 표준 이해 방식으로는 AJAX 요청이 아니지만 콘텐츠는 여전히 동적으로 액세스되며 최종 사용자에게는 차이가 없습니다.
$.ajax({
url: url,
type: "GET"
dataType: "jsonp",
...
두 번째, 데이터를 잘못 제공합니다.javascript 객체(오브젝트 리터럴을 사용하여 작성)를 시리얼화된 JSON 표현 대신 와이어에 푸시합니다.JSON 문자열을 만듭니다(수동이 아닌 예를 들어 사용). JSON.stringify
변환기):
$.ajax({
...
data: JSON.stringify({u: userid, p: pass}),
...
마지막 호, 설정 완료async
로.false
문서에는 다음과 같이 기재되어 있습니다.
교차 도메인 요청 및 dataType: "jsonp" 요청은 동기 작업을 지원하지 않습니다.
오류를 처리하는 두 가지 방법
크로스 도메인 JSONP 요구에 대한 오류 처리는 없습니다.Github https://github.com/jaubourg/jquery-jsonp에서 제공되는 jsonp 플러그인을 사용하여 오류 처리를 지원합니다.
jQuery ajax Timeout: 에러 콜백이 사일런트하게 실패했을 가능성이 있기 때문에, 적절한 시간이 경과한 후의 타임 아웃.실제 에러(또는 에러 상태)는 알 수 없지만, 적어도 에러는 처리할 수 있습니다.
저도 당신처럼 ajax jsonp DataType 요청 오류를 처리하려고 애쓰고 있지만, 제 코드를 공유하고 싶습니다. 도움이 되었으면 합니다.기본적으로는 ajax 요구에 타임아웃을 포함시키는 것입니다.그렇지 않으면 error: function은 입력되지 않습니다.
$.ajax({
url: "google.com/api/doesnotexists",
dataType: "jsonp",
timeout: 5000,
success: function (parsed_json) {
console.log(parsed_json);
},
error: function (parsedjson, textStatus, errorThrown) {
console.log("parsedJson: " + JSON.stringify(parsedjson));
$('body').append(
"parsedJson status: " + parsedjson.status + '</br>' +
"errorStatus: " + textStatus + '</br>' +
"errorThrown: " + errorThrown);
}
});
jsfiddle - jquery ajax 콜 및 JSONP dataType을 사용한 오류 처리 - 오류 404
저는 jquery-jsonp를 사용하는 취약한 JS 프로젝트를 만들고 있으며, 어떤 방법을 사용하든 오류를 처리하는 듀얼 jsonp/ajax 방식을 고안했습니다.
function authenticate(user, pass) {
var ajax = ($.jsonp || $.ajax)({
'url': /* your auth url */,
'data': { /* user, pass, ... */ },
'contentType': "application/javascript",
'dataType': 'jsonp',
'callbackParameter': 'callback' // $.jsonp only; $.ajax uses 'jsonpCallback'
});
ajax.done(function (data) {
// your success events
});
ajax.fail(function (jqXHR, textStatus, errorThrown) {
// $.jsonp calls this func as function (jqXHR, textStatus)
// and $.ajax calls this func with the given signature
console.error('AJAX / JSONP ' + textStatus + ': ' +
(errorThrown || jqXHR.url));
});
}
jquery-jsonp와 $.ajax 모두 jQuery Deferred 사양을 지원하므로 400 및 500 시리즈오류를 처리하고 타임아웃을 조회할 수 있습니다.
오래된 질문이지만 저도 같은 문제가 있었습니다.여기 나에게 효과가 있었던 해결책이 있다.
요청을 보내는 도메인을 소유하고 있는 경우 응답에 변수를 설정하고 클라이언트 측에서 해당 도메인을 확인할 수 있습니다.
서버측:
SERVER_RESPONSE=true; Callback(parameter1, parameter2);
클라이언트 측:
if(typeof SERVER_RESPONSE === 'undefined'){
console.log('No Response, maybe server is down');
}
else{
console.log('Got a server response');
}
언급URL : https://stackoverflow.com/questions/19035557/jsonp-request-error-handling
'programing' 카테고리의 다른 글
서브도메인 대신 서브디렉토리를 사용하려면 어떻게 해야 하나요? (0) | 2023.03.07 |
---|---|
WORDPRESS: cURL 오류 60: SSL 인증서 (0) | 2023.03.07 |
RewriteRule에서 폴더/디렉토리 제외 (0) | 2023.03.07 |
Postgres SQL의 '->>'과 '->'의 차이점은 무엇입니까? (0) | 2023.03.02 |
반응형 Spring Web Client - SOAP 콜 발신 (0) | 2023.03.02 |