2009-11-26 9 views
1

다음 코드를 사용하여 ASP.net MVC 응용 프로그램의 데이터를 요청하고 있습니다. 또한 요청/응답을 볼 수 있도록 TcpTrace도 사용하고 있습니다.Firefox JQuery JSON 문제

if (isInteger($('#txtDay').val()) && isInteger($('#txtMonth').val()) && isInteger($('#txtYear').val())) { 
    $.ajax({ 
     type: 'POST', 
     contentType: 'application/json; charset=utf-8', 
     url: strApi + 'wip/job/getsummary/' + $('#txtYear').val() + '/' + $('#txtMonth').val() + '/' + $('#txtDay').val(), 
     data: '{}', 
     dataType: 'json', 
     cache: false, 
     beforeSend: function(XMLHttpRequest) { ShowLoading(); }, 
     success: function(data, textStatus) { 
      ShowJobSummaryList(data); 
     }, 
     error: function(XMLHttpRequest, textStatus, errorThrown) { 
      HideLoading(); 
      ShowStatus('unable to retrieve job summary list'); 
      alert(XMLHttpRequest.statusText); 
      alert(textStatus); 
     }, 
     complete: function(XMLHttpRequest, textStatus) { 
      HideLoading(); 
     } 
    }); 
} 

IE를 모두 사용하면 콘텐츠 유형이 올바르게 application/json으로 설정됩니다. 그러나 Firefox 3.5.5에서는 콘텐츠 유형이 누락되었습니다.

OPTIONS /api/wip/job/getsummary/2009/11/25 HTTP/1.1 
Host: localhost:8080 
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-gb,en;q=0.5 
Accept-Encoding: gzip,deflate 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive: 300 
Connection: keep-alive 
Origin: http://localhost 
Access-Control-Request-Method: POST 
Access-Control-Request-Headers: x-requested-with 

이렇게하면 ASP.net MVC가 XML을 반환합니다. Firefox가 콘텐츠 유형을 전송하지 않는 이유를 설명 할 수 있습니까?

+0

조치 방법의 결과 유형은 어떤 유형의 결과입니까? –

+0

작업 메서드는 json으로 직렬화 된 객체를 포함하는 ActionResult를 반환합니다 (요청의 콘텐츠 유형이 application/json 인 경우 charset = utf-8 또는 xml이 기본값으로 사용됨) – markpirvine

+0

따라서 내장 된 JsonResult 유형을 사용하여 예를 들어 다음을 수행합니다. return json (objectToSerialize); –

답변

1

옵션 요청을 보내는 것처럼 보입니다. 이 문제의 일반적인 원인은 특정 브라우저 (firefox - here 참조)가 허용하지 않는 다른 도메인에 대한 ajax 요청을 시도 할 때입니다.

귀하가 요청한 URL이 다른 도메인에 있는지 명확히 할 수 있습니까? 이 경우 jsonp를 사용하거나 서버 프록시를 사용해야합니다.

+0

응답을 보내 주셔서 감사합니다. 그러나 요청은 동일한 도메인에 있습니다. ASP.net MVC 응용 프로그램이 같은 서버에 있습니다. – markpirvine

+0

다른 포트 번호가 Firefox에서이 동작을 유발하는 것 같습니다. 포트 8080 (TCPTrace)을 사용하여 포트 80을 통해 html 페이지를보고 있었고 ASP.net MVC app. 8080로 모든 것을 전환했습니다! – markpirvine

+0

예, 다른 포트는 x- 도메인으로 간주됩니다! – redsquare

0

비슷한 일이 일어나고 있습니다. Fiddler에서 동일한 요청을 실행하면 작동하지만 Firefox HttpRequester로 실행하면 작동하지 않습니다. 그래서 두 요청을 비교하고 HttpRequester가 요청 헤더를 변경하는 것처럼 보입니다. 난,이 일을 얻을 수있는 여러 가지 방법을 시도 원시 요청을 편집 할 수 있지만 내가 마지막 요청을 검사 할 때 여전히 콘텐츠 형식은과 같이 중복 :

Content-Type: application/json, application/json 

그리고 그것은 또한 다른 헤더의 무리를 추가합니다. 그러나 Fiddler가 한 마지막 요청을 확인했을 때 그것은 단지 :

Content-Type: application/json 

그리고 이렇게 작동했습니다.

비슷한 버그가 있다고 불평하는 Mozilla Firefox 제품 지원 페이지에 대한 리뷰를 찾았습니다. 하지만 HttpRequester에서 이전에 작동했던 것을 기억합니다. 최신 버전과 관련이 있습니다.