programing

IE가 파일을 포함하는 jQuery 멀티파트 형식의 데이터를 제출하는 동안 json 응답을 다운로드하려고 합니다.

mbctv 2023. 3. 17. 21:55
반응형

IE가 파일을 포함하는 jQuery 멀티파트 형식의 데이터를 제출하는 동안 json 응답을 다운로드하려고 합니다.

양식을 제출하려고 합니다.filejQuery를 통해 필드에 입력합니다.양식 플러그인, 코드는 다음과 같습니다.

$('form').ajaxSubmit({
  url: "/path",
  dataType: "json",
  contentType: "multipart/form-data"
...

서버는 응답으로 json을 반환합니다.응답을 파일로 다운로드하는 IE를 제외한 모든 브라우저에서 잘 작동합니다.양식에서 파일 필드를 삭제해도 제대로 작동합니다.

저는 여기와 구글에서 다양한 솔루션을 보았고 기본적으로 설정을 포함한 거의 모든 것을 시도했습니다.enctypejQuery를 통해 폼을 확인했지만 작동하지 않았습니다.

어떤 제안이라도 환영합니다.

컨트롤러에서 JSON을 "text/html"로 반환하고 JQuery.parseJSON()을 사용하여 클라이언트 측에서 해석할 수 있습니다.

컨트롤러:

    return this.Json(
            new
                {
                    prop1 = 5,
                    prop2 = 10
                }, 
            "text/html");

클라이언트 측:

jsonResponse = $.parseJSON(response);

if(jsonResponse.prop1==5) {
     ...
}

이 솔루션은 나에게 효과가 있었다.

이에 대한 직접적인 해결책을 찾지 못했지만 결국 다음과 같은 회피책을 구현했습니다.ajax 설정에서 사용한 컨트롤러에서 플레인텍스트를 반환하여 클라이언트 측에서 값을 구분하고 해석했습니다.그렇게 IE와 Forefox는 응답을 다운로드하는 것을 중단했다.

나는 평문을 반환하는 것 외에는 그 행동을 막을 방법이 없었다.JSON을 보통 텍스트로 되돌리고 $.parseJ로 해석해 보았습니다.SON, 하지만 몇 가지 js 오류로 인해 작동하지 않았습니다.

답장만 보내주시면 됩니다.'Content-Type', 'text/html'header를 클릭합니다.

셋팅 완료Content-Type: text/html

이것은 IE8이 인식되지 않기 때문에 발생합니다.application/...mimtype을 선택합니다.난 이거면 돼.

도움이 됐으면 좋겠다.

여러분들과 같은 상황: 문제는 오직enctype="multipart/form-data"에 사용되는 형태$(form).ajaxSubmit(...)기능.

저와 제 팀은 (이 함수로) 교체해야 했습니다.dataType: 'json'을 선택하다.dataType: 'text'추가하다responseText = $.parseJSON(responseText);서버 응답 해석을 강제합니다.

물론 서버 측에서도 대응해야 했습니다."text/plain"머리글 대신 머리글"application/json"

자랑스럽지는 않아요:(IE는 확실히 모든 것을 죽이고 있습니다...

zmonteca의 조언은 시도하지 않았지만(이미 너무 많은 시간을 들여서) 가치가 있을 것 같습니다.괜찮으시다면 알려주세요.

도움이 됐으면 좋겠다!

당신이 Zend와 함께 일한다면

$this->getResponse()->setHeader('Content-Type', 'text/html');

컨트롤러의 액션에 대응합니다.클라이언트 측에서는 jQuery의 경우 다음 작업을 수행할 수 있습니다.

data = $.parseJSON(data);

이 사이트에서는 응답을 http://forum.jquery.com/topic/jquery-form-malsup-ie7-file-download-security-warning-on-ajax-file-upload로 정리하는 방법에 대해 설명합니다.

서버에 문자열로 JSON을 반환함으로써 문제를 해결할 수 있을 것 같았습니다.그 후 완전한 이벤트 내에서 JSON.parse()를 사용했습니다.

Zend Framework에서 다음과 같은 회피책을 생각해 냈습니다.

if (!$this->_request->isXmlHttpRequest()) {
    die('<textarea>'.Zend_Json::encode($data).'</textarea>');
}
$this->view->assign($data);

콘텐츠 삭제서버사이드에서 타이핑하면 됩니다.

언급URL : https://stackoverflow.com/questions/8151138/ie-tries-to-download-json-response-while-submitting-jquery-multipart-form-data-c

반응형