Ajax и Internet Explorer - PullRequest
       1

Ajax и Internet Explorer

1 голос
/ 04 мая 2011

У меня есть фрагмент кода JavaScript с запросом ajax, который распечатывает содержимое файла XML, который не будет работать в IE8. Я наткнулся на некоторые предложения, когда гуглил эту проблему, и я попробовал те, которые, казалось, имели отношение к тому, что я пытался сделать. Я добавил следующую строку в мой файл .htaccess: AddType application / xml .xml .rss; Я добавил overridemimetype в свой код и включил следующую строку в начало моего xml-файла: header ('Content-type: text / xml'). Ничто из этого не имело никакого значения для вывода в IE8, но добавление строки типа контента в файл XML прекратило его работу в Firefox. Я подумал, что неправильно понимаю что-то о строке типа контента, поэтому я попытался включить ее в php-файл, который создает XML-файл. Когда я поместил его в начало файла PHP, я получил это предупреждение: Предупреждение: невозможно изменить информацию заголовка - заголовки уже отправлены. Я попытался поместить в начало функцию, которая создает файл XML, но это не имело никакого эффекта. Код, который я использую ниже

<html>
<head>
<body>

    <script type ="text/javascript">

        if (window.XMLHttpRequest)
        {
            xhttp=new XMLHttpRequest();
        }
        else // 
        {
            xhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
        if (xhttp.overrideMimeType)
            xhttp.overrideMimeType('text/xml')


        xhttp.open("GET","captions_7.xml",false);
        xhttp.send();
        xmlDoc=xhttp.responseXML;
        if(xmlDoc)
        {
            document.write("ok");
            //in ie ok prints

        }
        else
        {
            document.write("failed");
        }

        elements = xmlDoc.getElementsByTagName("p");
        length = elements.length;

        for (var i=0; i<length ; i++)
        {
            //caption text
            document.write(xmlDoc.getElementsByTagName("p")[i].childNodes[0].nodeValue + "<br />");
            //start time
            document.write(xmlDoc.getElementsByTagName("p")[i].getAttribute("begin")+ "<br />");
            //end time
            document.write(xmlDoc.getElementsByTagName("p")[i].getAttribute("end")+ "<br />");
        }


    </script>

</body>
</html>

В IE8 единственный выход из этого файла - ОК. В Firefox, Opera и Chrome отображается содержимое файла XML. Я проверил файл XML в валидаторе, и он не сообщил об ошибках, поэтому я не думаю, что это проблема. Я был бы очень признателен, если бы кто-нибудь знал о решении этого или есть какие-либо предложения относительно того, что я могу попробовать

Если это важно, это функция, которая создает XML-файл:

function createXML($referenceId){
header('Content-type: text/xml');
$content_id = $referenceId;
$XMLStart="<tt xml:lang=\"en\"><head><layout/></head><body><div xml:id=\"captions\">";
$XMLEnd = "</div></body></tt>";

$text;


$captionQuery = "SELECT caption_text, start_time, end_time FROM captions WHERE content_id = $content_id ORDER BY start_time ASC;";

$captionResult = mysql_query($captionQuery);


if(mysql_num_rows($captionResult)){

    while($row = mysql_fetch_array($captionResult)){


        $text.="<p begin=\"".$row[start_time]."\" end=\"".$row[end_time]."\">".$row[caption_text]."</p>";

         }
}//end if

$XMLString = $XMLStart.$text.$XMLEnd;

$captionsFile="captions_".$content_id.".xml";
$captionsFileHandle = fopen($captionsFile, w) or die("can't open file");
fwrite($captionsFileHandle, $XMLString);
fclose($captionsFileHandle);
return $captionsFile;  

}

Я очень новичок во всем этом, поэтому извиняюсь, если это очень глупый вопрос. Я предполагаю, что это должно быть сделано каждый день много тысяч раз, но я просто не вижу, что я могу сделать, чтобы это исправить.

Ответы [ 2 ]

0 голосов
/ 05 мая 2011

Ваша PHP-функция делает это: создает XML-файл (фактический файл), который записывает на диск. возвращая имя этого файла.

Что вам нужно сделать: создать строку из всего XML, который вы хотите отправить клиенту, повторить эту строку

Итак:

Удалить:

$captionsFile="captions_".$content_id.".xml";
$captionsFileHandle = fopen($captionsFile, w) or die("can't open file");
fwrite($captionsFileHandle, $XMLString);
fclose($captionsFileHandle);
return $captionsFile;  

И заменить его на

echo $XMLString;

Эта проблема, скорее всего, не имеет отношения к тому, используете ли вы jquery или нет.

0 голосов
/ 04 мая 2011

Я настоятельно рекомендую использовать функцию jJuery AJAX;он совместим с разными браузерами, поэтому должен помочь решить проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...