2010-06-08 8 views
1

jQuery.load 함수에 의해 만들어진 ajax 호출과 관련하여 IE7에 문제가 있습니다.jQuery/Ajax IE7 - 긴 요청이 실패합니다.

기본적으로 요청은 URL 문자열이 너무 길지는 않지만 URL이 매우 커지면 실패합니다. Ajax 호출에서 디버깅 중 일부를 수행했습니다.이 오류를 발견했습니다.

URL: <blanked out security reasons but it's very long> 
Content Type: 
Headers size (bytes): 0 
Data size (bytes): 0 
Total size (bytes): 0 
Transferred data size (bytes): 0 
Cached data: No 
Error result: 0x800c0005 
Error constant: INET_E_RESOURCE_NOT_FOUND 
Error description: The server or proxy was not found 
Extended error result: 0x7a 
Extended error description: The data area passed to a system call is too small. 

아무 것도 보내지 않은 것 같습니다. 이제 IE7에서만 발생하지만 다른 브라우저에서는 그렇지 않습니다. IE8에서는 약간의 지연이 있지만 여전히 작동합니다. 동일한 요청은 URL 문자열이 상대적으로 작을 때 잘 작동합니다.

이제 호환성 문제로 IE7에서이 작업이 필요하며 이에 대한 해결 방법을 찾을 수 없습니다.

실제 AJAX 호출은 다음과 같이이다 :

$("ID").load("url?lotsofparams",callbac func(){}); 

가끔 작거나 매우 큰 것으로, 변화 할 수있다 "lotsofparams". 문자열이 매우 커서 IE7에 대해서만 위의 오류가 발생합니다.

답변

4

로드는 HTTP Get 메소드를 사용하므로 URL의 크기에는 제한이 있습니다. 알고있는 한 4KB입니다. 따라서 GET 대신 HTTP Post 옵션과 함께 $ .ajax를 사용하십시오. 게시물에는 제한이 없습니다.

다음 코드를 사용하십시오.

$.ajax({ 
       url: url, 
       type: "POST", 
       async: true, 
       data: {name1: value1, name2: value2, ...}, // put your data. 
       success: function(data, textStatus) { 
       $("ID").html(data); 

       } 
     }); 
+0

접근 방식은 옳다. 그러나 GET 요청의 한계는 브라우저마다 다르며 버전에 따라 다르다. –

+0

이 방법은 쉽게 기존 코드와 통합 할 수 있습니다. –

4

query string parameters을 URL에 넣지 마십시오.

.load()의 두 번째 매개 변수는이를 위해 만들어졌습니다.

$("ID").load("url", { 
    foo:  "bar", 
    morefoo: "morebar" 
},callbac func(){}); 

또는 .load()는 내부적으로 "POST"요청을 사용하기 때문에 당신은 $.post()

$.post("url", { 
    foo:  "bar", 
    morefoo: "morebar" 
}, function(data){ 
    alert(data); 
}); 

를 사용할 수있는 개체를 구문 분석 할 때, 당신은 당신이 필요한 경우 $.get()로 교체하는 것이 좋습니다 :이어야한다 "GET"요청.

+0

흠 그게 내가 생각한 것 ... 그리고 그 쿼리 문자열은 여러 곳에서 만들어져 있고 "var = val"형식의 변수에 저장되어 있기 때문에 약간의 문제가 될 것입니다. 이상하게도 FF로 작동합니다 및 IE8. –

+0

이것은 클라이언트 만 변경할 수있는 것은 아니며, 두 가지 해결책 중 하나가 더 이상 "GET"이 아니기 때문에 그가 서버 측 작업을 변경해야 할 필요가 있음을 언급해야합니다. 추가해야 할 중요한주의 사항입니다. –

+0

@Nick :'.load()'는 밑에'.get()'을 사용하고 있습니다. – jAndy

0

이 문제가 발생했습니다. 나는 URL (긴 querystring)을 통해 모든 것을 보냈는데 실패했다. URL의 쿼리 문자열 섹션 인 데이터를 자체 매개 변수 (이 예제에서는 dataparms)로 보내는 것이 중요하다는 것을 알았습니다.

$ .ajax ({type : "POST", url : URL, data : dataparams, dataType : "html", async : false});

관련 문제