2010-08-18 2 views
2

$ .ajax를 사용하여 서버에 게시하는 jQuery 함수가 있는데 IE, Chrome, Safari에서는 잘 작동하지만 Firefox에서는 POST 값이 서버에 수신되지 않습니다. . 난 (클래식 ASP를 사용하여) 양식 모음을 조회 할 때, 나는 그것은 확실히 서버를 때리고 모든 값

$.ajax({ 
    type: 'POST', 
    url: url, 
    dataType: "text", 
    data: { value1: true, value2: false }, 
    success: function(html) { 
     // removed for clarity 
    }, 
    error: function(xhr, ajaxOptions, thrownError) { 
     // removed for clarity 
    } 

에 대한 undefined을 얻고, 내가 방화범 값을 볼 때, 내가 대한 기대 정확하게 보여줍니다 POST,하지만 어딘가에 데이터가 누락 될 것입니다.

IIS를 로컬에서 실행하면 문제가 더 복잡해지기 때문에 모든 브라우저에서 정상적으로 작동합니다.

그것은 URL이이에 실행중인 도메인을에 따라 생성 될 때 크로스 도메인 게시물을하고 있지, 그래서 내가 문제

나는 간단 뭔가를해야만 같아요에게 원인이 될 수 있다는 점에서 하드 코드 된 값을 떠난 적이 없다 내가 놓친했지만, 내 인생, 내가 볼 수있는

답변

3

짧은 대답 :

는 HTTP POST를 제출, 대부분의 브라우저 (모든 파이어 폭스를 제외하고, 지금까지 내가 말할 수있는) 하나의 TCP/IP 프레임에 HTTP 요청 헤더를 보내고 실제 POST 데이터에 대해 새로운 두 번째 프레임을 시작합니다 (이론적으로 ly) 모두 하나의 프레임에 맞습니다. 파이어 폭스는 이렇게하지 않습니다. 요청 헤더와 동일한 프레임에 POST 데이터를 보내고 전체 요청 (헤더 + POST 데이터)이 단일 프레임에 들어 가지 않는 경우에만 여러 프레임으로 넘쳐납니다. HTTP POST가 사용자 정의 404 오류 처리기 페이지에서 처리 될 때 초기 요청과 동일한 TCP 프레임에 포함 된 모든 POST 데이터가 삭제된다는 IIS 7.0의 버그가 있습니다.

더러운 더러운 해결 방법은 양식의 첫 번째 내용이 1460 바이트의 패딩 (예 : <input type="hidden" name="padding" value="xxxxxxx...." />)이되도록해야합니다. 두 번째 것은 패딩으로 인한 구문 분석 오류를 해결하기위한 더미 이름/값 쌍입니다. - <input type="hidden" name="splitter" value="1" />. 이후 폼 값은 Request.Form 컬렉션에 정상적으로 표시되어야합니다.

우리가이 모든 작업을 어떻게 처리했는지에 대한 오랜 대답과 설명은 this post on my blog을 참조하십시오.