2015-02-11 230 views
-1

我必须将网页(在PHP上)改写为ajax,但我很难将HTML + PHP代码手动转换为PHP字符串。 更具体地说我必须逃离下面这段代码(细节并不重要)将PHP + HTML转换为PHP字符串

HTML

<div id="accordion"> 
    <?php foreach ($processs as $process){ ?> 
     <label><?php echo $process['opperation'] . '.' . $process['codigo'] . ' ' . $process['nome']; ?></label> 
     <div> 
     <table id="<?php echo $process['id']; ?>"> 
      <tr> <th>subprocesss chave</th>    <th>Inhabilitar</th> </tr>     
       <?php $subprocesss = $objControlopperation->obtersubprocesss($process['id']); 
         if (count($subprocesss)){ 
          foreach ($subprocesss as $subprocess){ ?> 
      <tr> <td> <?php echo $process['opperation'] . '.' . $process['codigo'] . '.' . $subprocess['codigo'] . ' ' . $subprocess['nome'] ?></td>  
       <td > 
        <input type="checkbox" id="<?php echo $subprocess['id']; ?>" onClick="habilitada('<?php echo $subprocess['id']; ?>','<?php echo $process["id"]; ?>')" /> 
       </td> </tr> 
         <?php } 
         }?> 
      <tr> 
       <td colspan="3" > 
        Nova subprocess: 
       <input type="text" id="<?php echo 'novoRegistro_'.$process['id']; ?>" /> 
       <label onclick="adicionarCaracteristica('<?php echo $process['id']; ?>')">Adicionar</label> 
       </td> 
      </tr> 
     </table> 
     </div> 
    <?php 
    } 
    ?> 

成类似于此:

PHP

$html = " 
      <tr> <th>subprocesss chave</th>    <th>Inhabilitar</th> </tr>"; 

    $subprocesss = $objControlopperation->obtersubprocesss($process['id']); 
     if (count($subprocesss)){ 
      foreach ($subprocesss as $subprocess){ 
       $html .= "<tr> <td>". 
          $process['opperation'] . '.' . $process['codigo'] . '.' . $subprocess['codigo'] . ' ' . $subprocess['nome']. 
          " </td> <td > <input type=\"checkboxid=\"". 
          $subprocess['id']. 
          "\" onClick=\"habilitada('" . 
           $subprocess['id'] . 
           "\',\'" . 
           $process["id"] . 
           "\')\" /> </td> </tr> "; 

      } 
     }; 
     $html .="<tr> 
       <td colspan=\"3\" > 
        Nova subprocess: 
        <input type=\"text\" id=\"novoRegistro_'" . 
            $process['id'] . 
            "\" /> <label onclick=\"adicionarCaracteristica('<" . 
            $process['id'] . 
            "')\">Adicionar</label> </td></tr>"; 


    } 

我需要这样做,因为$ html变量是AJAX生成的新网页。问题是这必须在不同的地方完成,所以我想知道是否有一些工具可以促进转义过程。 这是我第一次使用AJAX,所以任何暗示或想法来解决这类问题都非常受欢迎。

+0

亲自送回来,我只想建议坚持单引号字符串,并根据需要连接。当然,除非你想使用模板系统或'sprintf'或类似的工具来清理。 – 2015-02-11 21:03:41

+0

我不明白你为什么要从第一块到第二块。如果你认为Ajax需要这个,你一定很困惑。 – developerwjk 2015-02-11 21:18:07

+0

Ajax只是返回被调用的PHP打印到JavaScript回调的任何内容。它会这样做,无论你使用风格1还是风格2 ...而风格2只是简单的丑陋。更不用说将整个HTML页面连接成一个字符串将会使用更多的资源,所以不必在不必要的时候完成。没有必要仅仅因为你使用Ajax。 – developerwjk 2015-02-11 21:23:16

回答

1

我喜欢我的代码是可读的,易于maintaint(如果可能的话),所以我会写像这样的第一部分:你所说的我曾经编写HTML部分

$subprocesss = $objControlopperation->obtersubprocesss($process['id']); 
    if (count($subprocesss)){ 
     foreach ($subprocesss as $subprocess){ 
      $html .= sprintf(
      '<tr> 
       <td>%s.%s.%s.%s</td> 
       <td> 
        <input 
         type="checkbox" 
         id="%s" 
         onclick="habilitada(%s , %s)"/> 
       </td> 
      </tr>', 
      $process['opperation'], 
      $process['codigo'], 
      $subprocess['codigo'], 
      $subprocess['nome'], 
      $subprocess['id'], 
      $subprocess['id'], 
      $process["id"] 
     ); 
    ... 
0

感谢您的重播并在AJAX上重复使用它而不做任何更改。这是代码。

的观点:

<?php 
    $HTML =' <table class="tabela"> 
      <tr><th><h2>Configurar PRO</h2></th></tr> 
      <tr><td><div id="accordion"> '; 
     foreach ($processos as $processo){ 
      $HTML.= sprintf(' 
       <label> %s.%s %s </label> 
       <div><table id="tabela_%s" ', 
        $processo['cerne'], 
        $processo['codigo'], 
        $processo['nome'], 
        $processo['id'], 
        $processo['id']); 
      $HTML.= $objControlCERNE->montarPratica($processo); 
      $HTML.='</table></div> '; 
     } 
    $HTML.='</div></td></tr> 
     </table>'; 
    echo $HTML; 
?> 

控制器。 obterProcessos和obterPraticas查询数据库以获取过程和练习的列表。

的JS处理

<script type="text/javascript"> 
    function habilitada(pratica_id, processoinfo, idResponse){ 
     var task = "<?php echo TASK.'habilitar_desabilitarPraticas&pratica_id='; ?>"+pratica_id; 

     alert(task+' idResponse: '+idResponse); 

     enviarViaAjax(task,idResponse); 
    } 

</script> 

<?php 
class Control_PRO{ 

    public function obterProcessos(){ 
     try{ 
      $objPRO_DAO = new PRO_DAO(); 
      return $objPRO_DAO->obterProcessos(); 
     }catch(Exceptio $ex){ 
      if ($ex->getCode()==0){ 
       echo '<pre>'; 
       debug_print_backtrace(); 
       throw new Exception('Error no metodo: '. __METHOD__ . ' tabela: '. $tabela, 1); 
      } 
      throw new Exception($ex->getMessage()); 
     } 
    } 
    private function obterPraticas($processo_id){ 
     try{ 
      $objPRO_DAO = new PRO_DAO(); 
      return $objPRO_DAO->obterPraticas($processo_id); 
     }catch(Exceptio $ex){ 
      if ($ex->getCode()==0){ 
       echo '<pre>'; 
       debug_print_backtrace(); 
       throw new Exception('Error no metodo: '. __METHOD__ . ' tabela: '. $tabela, 1); 
      } 
      throw new Exception($ex->getMessage()); 
     } 
    } 

最后montar PRATICA是HTM段是会被AJAX

public function montarPratica($processo){ 

      $HTML ='<tr> <th>Práticas chave</th> <th>Inhabilitar</th> </tr> '; 
      $objControlPRO = new Control_PRO(); 
      $praticas = $objControlPRO->obterPraticas($processo['id']); 
      if (count($praticas)){ 
       foreach ($praticas as $pratica){ 
        $HTML.=sprintf(' <tr> 
              <td> %s.%s.%s.%s </td> 
              <td> <input type="checkbox" id="%s" onClick="habilitada(%s,\'%s\')" %s> </td> 
            </tr> ', 
          $processo['PRO'], 
          $processo['codigo'], 
          $pratica['codigo'], 
          $pratica['nome'], 
          $pratica['id'], 
          $pratica['id'], 
          "tabela_".$processo["id"], 
          $pratica['ativada']==1 ? 'checked' : ""); 
       } 
      } 
      return $HTML.sprintf(' <tr> 
              <td  colspan="3" > 
              Nova prática: 
              <input type="text" id="novoRegistro_%s" /> 
              <label onclick="adicionarCaracteristica(%s)">Adicionar</label> </td> 
             </tr>', 
        $processo['id'], 
        $processo['id']); 
    } 
} 

和AJAX

function createRequestObject() { 
     var ro;//objeto request 
     if(navigator.appName == "Microsoft Internet Explorer"){ 
      ro = new ActiveXObject("Microsoft.XMLHTTP"); 
     }else{ 
      ro = new XMLHttpRequest(); 
     } 
      return ro; 
} 

var http_A01 = createRequestObject();//agora a variável http_A01 contém os atributos de um objeto request. 
var divResposta; 

    function enviarViaAjax(task, idResponse) { 

     //alert("task:"+task+" idResponse:"+idResponse); 
     divResposta = idResponse; 

     http_A01.open("post", ""+task);//abrindo conexao 
     http_A01.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
     http_A01.setRequestHeader("charset", "charset=UTF-8"); 
     http_A01.onreadystatechange = handleResponse_A01;//assim que o satus for alterado entrará no método de resposta 
     http_A01.send();//enviando os paramentros para o teste.php 
    } 

    function handleResponse_A01() { //metodo de retorno 

     /* readyState: 
       0: request not initialized 
       1: server connection established 
       2: request received 
       3: processing request 
       4: request finished and response is ready 
     */