Сообщение не работает должным образом на IE9 - PullRequest
0 голосов
/ 13 марта 2012

Я пытаюсь опубликовать форму и получить ответ сервера в целевом iframe, используя простой HTML.Пока что у меня есть:

<iframe name="iframe" id="iframe" onload="loaded()" style="display:none"></iframe> 

, чем у меня есть:

<form id="form" action="/rpc/test" method="post" target="iframe">
    <!--....... form input ............-->
    <input type="submit" class="button" name="Test" id="Test" value="Test">
</form>

и, наконец, в теге script у меня загружена функция, которая должна обработать ответ:

<script language="javascript" type="text/javascript">
function loaded() {
    var ifr = document.getElementById('iframe');
    var dc = ifr.contentWindow || ifr.contentDocument;
    if (dc.document) {
        dc = dc.document;
    }
    var rsp = dc.documentElement.innerText || dc.documentElement.textContent;
    var obj = JSON.parse(rsp);
    if (obj && obj.success === true) {
        // DO very important things
        return;
    }
}
</script>

Это работает абсолютно нормально во всех возможных браузерах, кроме IE9 (но не тестируйте его на более низких версиях IE).В IE9 ответ представляет собой файл, который содержит правильный ответ сервера.IE9 спрашивает меня "Хотите открыть или сохранить .....?"

Мой сервер - это nodejs.Я установил ответ:

resposnse.writeHead(200, { 'Content-Type': 'application/json' });

Я могу отследить в сетевом мониторе IE9, что Content-Type является 'application / json'

Есть идеи?

Ответы [ 3 ]

0 голосов
/ 13 марта 2012

На стороне сервера, когда вы возвращаетесь, убедитесь, что для типа контента установлено значение JSON.

В .NET будет что-то вроде

result.ContentEncoding = System.Text.Encoding.UTF8; 
result.ContentType = "application/json; charset=UTF-8
0 голосов
/ 01 февраля 2013

В этом случае вы должны позаботиться о том, чтобы Chrome или Firefox отправляли другой пост-запрос из ie9 или 8

. Chrome будет отправлять запрос OPTION сначала тестовое соединение, а затем отправлять пост-запрос, но IE не очень заботился.этого, и вы должны попробовать больше настроек ответа, как показано ниже

response.header("Content-Type", "application/json;charset=utf-8");
response.header("Access-Control-Allow-Methods","POST,GET,OPTIONS");
response.send("try");

и позаботиться о том, чтобы вы сначала ответили chrome

if(request.method==='OPTIONS')

 response.send(200);

надеюсь, эта информация поможет вам

0 голосов
/ 13 марта 2012

Кажется, это проблема с MIME-файлом.Убедитесь, что сервер действительно возвращает вывод application / json

Вот несколько похожих сообщений:

...