2013-07-03 3 views
0

Я пытаюсь сделать следующее: Когда пользователь нажимает кнопку предварительного просмотра, выделенный код синтаксиса отображается с использованием AJAX, но он не работает. Что я делаю неправильно? Вот три кода: index.html:Предварительный просмотр кода с использованием ajax не отвечает

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
    <head> 
    <script type="text/javascript" src="preview.js"></script> 
    <meta http-equiv="content-type" content="text/html; charset=windows-1250"> 
    <title>Test Code Preview</title> 
    </head> 
    <body> 
     <textarea id="pastecode" rows="20" cols="50" name="pastecode"></textarea> 
     <br /><input type="text" id="language" name="language"/> 
     <br /><input type="button" onclick="process()" value="Preview"/> 
     <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 
     <div id="previewcode"></div> 
    </body> 
</html> 

preview.js:

var xmlHttp= createXmlHttpRequestObject(); 

function createXmlHttpRequestObject(){ 
    var xmlHttp; 

    if(window.ActiveXObject){ 
     try{ 
     xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); 
     }catch(e){ 
      xmlHttp =false; 
      } 
     }else{ 
     try{ 
      xmlHttp= new XMLHttpRequest(); 
      }catch(e){ 
       xmlHttp =false; 
       } 
     } 
     if(!xmlHttp) 
      alert("cant create that object hoss!"); 
     else 
      return xmlHttp; 
    } 

function process(){ 
    if(xmlHttp.readyState==0 || xmlHttp.readyState==4){ 
     code=encodeURIComponent(document.getElementById("pastecode").value); 
     language=encodeURIComponent(document.getElementById("language").value); 
     xmlHttp.open("POST", "preview.php", true); 
     xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); 
     xmlHttp.onreadystatechange = handleServerResponse; 
     xmlHttp.send("pastecode="+code+"&language="+language); 
     } 
    } 


function handleServerResponse(){ 
    if(xmlHttp.readyState==4){ 
      if(xmlHttp.status==200){ 
       xmlResponse=xmlHttp.responseXML; 
       xmlDocumentElement=xmlResponse.documentElement; 
       code=xmlDocumentElement.firstChild.data; 
       document.getElementById('previewcode').innerHTML=code; 
     } 
     } 
    } 

preview.php:

<?php 
header('Content-Type: text/xml'); 
echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>'; 

echo '<response>'; 
    $code=$_POST['pastecode']; 
    $language=$_POST['language']; 
    include("geshi/geshi.php"); 
    $path  = ''; 
    $geshi = new GeSHi($code, $language, $path); 
    $geshi->set_overall_style('background-color: #ffffee;', true); 
    $out = $geshi->parse_code(); 
    echo htmlentities($out); 
echo '</response>'; 
?> 

То, что происходит, я заполнения текстовое поле для pastecode и текстовое поле для языка и нажатие кнопки, но ответа нет. Я использую Firefox.

ответ

0

Вы действительно должны использовать библиотеку, такую ​​как JQuery для своих запросов Ajax. Таким образом, вам не придется беспокоиться о расхождениях между различными браузерами и версиями браузера.

Пример того, что preview.js может выглядеть следующим образом:

function process(){ 

    $.ajax({ 
     url: "preview.php", 
     type: "post", 
     data: { 
      pastecode: $("pastecode").val(), 
      language: $("language").val() 
     }, 
     success: function(data){ 
      $("#previewcode").html(data); 
      //Or handle data with jQuery.parseXML() 
     }, 
     error:function(jqXHR, textStatus, errorThrown){ 
      alert("The following error occured: " + textStatus + " " + errorThrown); 
     } 
    }); 

} 
+0

Я не думаю, что он не работает из-за браузера неточностей. Я использовал один и тот же firefox для некоторых других простых аякс-кодов. Я думаю, что есть некоторая ошибка в моей логике кода. Вот почему он не работает. – user2007130

Смежные вопросы