문제
jQuery의 getjson () 호출을 통해 크로스 도메인 웹 서비스를 호출하고 있습니다. 응답 객체 크기가 꽤 크기 때문에 웹 서비스의 최대 JSON 크기를 사용했습니다. GetJson ()이 적절한 응답 객체를 제공하는 것을 확인했습니다. 그러나 여전히 내 콜백 함수는 호출되지 않았습니다. Firebug는 (Firefox) 응답 크기가 초과되었다고 말합니다.
누구든지 표준 브라우저 (Firefox, IE)가 처리하는 최대 브라우저 응답 크기 한계와 문제를 처리하는 방법을 말할 수 있습니까?
다음은 동일한 코드 스 니펫입니다.
//Wrapper call to the actual getJson call
function getResponse() {
var localService = new getServiceProxy("SearchData.asmx");
localService.invoke("Search", "", "successcall");
}
//getJson call
function getServiceProxy(serviceUrl) {
var _I = this;
this.serviceUrl = serviceUrl;
// *** Call a wrapped object
this.invoke = function(method, data, callback, error) {
if (data == "") {
var url = _I.serviceUrl + "/" + method + "?output=json&callback=?";
}
else {
url = _I.serviceUrl + "/" + method + "?" + data + "&output=json&callback=?";
}
$.getJSON(url, function(arg) {
var evalstr = callback + "(" + JSON.stringify(arg) + ");";
eval(evalstr);
});
}
}
//success callback function
function successcall(multiSearchResponse) {
//use the response.
}
모든 도움은 높이 평가 될 것입니다.
감사합니다 Subrat.
해결책
나는 프로젝트에서 한 번 이것을 겪었으며, 내가 기억하는 것은 IE가 게시물과 요청 모두에 대해 2083 자의 한계를 가지고 있다는 것입니다. FF는 한계가 더 높지만 무한하지는 않습니다.
다른 팁
이상하게 보이는 것은 콜백 함수입니다.
$.getJSON(url, function(arg) {
var evalstr = callback + "(" + JSON.stringify(arg) + ");";
eval(evalstr);
});
JSONP를 사용하고 있기 때문에 (크로스 도메인이기 때문에) 응답 서비스는 다음과 같은 JavaScript를 반환해야합니다.
jQueryGeneratedUniqueCallbackName12345({my: 'data', foo: 'bar'});
그래서 arg 인수는 실제 JavaScript 객체입니다. stringify 다음 평가할 필요는 없습니다. 즉, 그대로 사용하십시오.
$.getJSON(url, function(data) {
console.log(data.foo);
});
꽤 오래 전에 나는에 대해 게시했다 JSONP의 내부 작업 자세한 내용에 관심이 있으시면 내 블로그에서.
어쩌면 당신은 당신을 원할 것입니다 $.getJSON
다음과 같이 부품 모양 :
$.getJSON(url, function(arg) {
callback.apply(null, JSON.stringify(arg));
});
// Or more simply
$.getJSON(url, function(arg) {
callback(JSON.stringify(arg));
});
더 많은 정보에 대한 정보 apply
: MDN 문서
업데이트: 그 전에 당신은 또한 변경할 수 있습니다 getResponse
기능 :
function getResponse() {
var localService = new getServiceProxy("SearchData.asmx");
localService.invoke('Search', '', successcall);
}