繁体   English   中英

使用标题后如何将页面加载到div中

[英]How to load a page into a div after using header

我想知道在将标头转换成php代码后如何将html页面加载到div中。

例如:

我有主页。 当我单击左侧的菜单时,它将在div内加载一个名为“ content”的页面。 在名为content的div内,我有一个表单,填写表单后,单击“发送”按钮。

通过单击发送按钮,我将重定向到我的php代码,即insert_produto.php。

在页面insert_produto.php中,我有以下代码:

 <?php include '../logado.php'; $tipo =$_POST["tipo"]; $marca =$_POST["marca"]; $comprimento =$_POST["comprimento"]; $externo =$_POST["externo"]; $interno =$_POST["interno"]; $quantidade =$_POST["quantidade"]; //$conen tem que ser o nome da conexão, depois disso monta a query //mysqli_query($conec,"INSERT INTO produtos (tipo) VALUES ('$tipo')"); if ($quantidade == "") { $quantidade = 1; } for ($i = 1; $i <= $quantidade; $i++) { if ($externo == '' or $interno == '') { echo "Os seguintes valores são obrigatórios:</p>"; echo "• Diâmetro Externo;</p>"; echo "• Diâmetro Interno."; echo "</br></br>"; echo '<form id="erro" action="../main.php" method="post">'; echo '<input type="submit" class="botao" value="Voltar">'; echo '</form>'; die; } // se INTEIRO = primeira query, ELSE segunda query if ($comprimento == '' and $tipo == 'Inteiro'){ mysqli_query($conec,"INSERT INTO produtos (tipo, marca, comprimento, diaexterno, diainterno) VALUES ('$tipo', '$marca', '1000', '$externo', '$interno')"); } elseif ($comprimento == '' and $tipo == 'Pedaço') { echo "Os seguintes valores são obrigatórios:</p>"; echo "• Comprimento;</p>"; echo "</br></br>"; echo '<form id="erro" action="../main.php" method="post">'; echo '<input type="submit" class="botao" value="Voltar">'; echo '</form>'; die; } else { mysqli_query($conec,"INSERT INTO produtos (tipo, marca, comprimento, diaexterno, diainterno) VALUES ('$tipo', '$marca', '$comprimento', '$externo', '$interno')"); } } // ENCERRA O LAÇO DE REPETIÇÃO "FOR" //header("Location: " . $_SERVER["HTTP_REFERER"]); header("location: /main.php"); echo '<div class="content"> <?php include("/cadastro/produto.php"); ?> </div> ' ?> 

FOR之后 ,我使用Header返回主页。 但是,当我进入主页时,我想在div内重新加载名为“ content”的上一个html页面。

我也不必介意是否必须手动指定要在div中加载哪个页面,实际上我更喜欢这种方式。

在您的情况下,您使用的是Location标头,它将HTTP结果代码更改为302 Redirect ,并包含您回显后的内容(在本例中为<div>并包含/cadastro/produto.php 。所有现代浏览器都将忽略接收到的内容,并将用户重定向到位置 URL,要做的唯一方法是使用AJAX提交表单并处理响应。

例如,考虑到您在<form>标记处有id = form ,您可以这样进行(使用jQuery):

<script type="text/javascript">
$('#form').on ( 'submit', function ( e)
{
  e && e.preventDefault;
  $.ajax (
  {
    url: 'insert_produto.php',
    error: function ( jqXHR, textStatus, errorThrown)
    {
      alert ( 'Error sending form: ' + jqXHR.status + ' ' + jqXHR.statusText);
    },
    success: function ( data, textStatus, jqXHR)
    {
      if ( typeof ( data) == 'object' && 'result' in data)
      {
        if ( data.result == 'ok')
        {
          alert ( 'Added!');
          $('#content').load ( data.location);
        } else {
          alert ( data.message);
        }
      } else {
        alert ( 'Unknown data received.');
      }
    }
  });
});
</script>

在您的PHP脚本中,您需要返回具有以下结构的JSON对象:

{
  "result": "ok",
  "location": "\/cadastro\/produto.php"
}

并且在错误的情况下,具有以下结构:

{
  "result": "error",
  "message": "My error message"
}

您可以使用:

 <?php include '../logado.php'; $tipo =$_POST["tipo"]; $marca =$_POST["marca"]; $comprimento =$_POST["comprimento"]; $externo =$_POST["externo"]; $interno =$_POST["interno"]; $quantidade =$_POST["quantidade"]; $return = array (); header ( "Content-Type: text/json"); //$conen tem que ser o nome da conexão, depois disso monta a query //mysqli_query($conec,"INSERT INTO produtos (tipo) VALUES ('$tipo')"); if ($quantidade == "") { $quantidade = 1; } for ($i = 1; $i <= $quantidade; $i++) { if ($externo == '' or $interno == ''){ $return["result"] = "error"; $return["message"] = "Os seguintes valores são obrigatórios:\\n• Diâmetro Externo;\\nDiâmetro Interno."; die ( json_encode ( $return); } // se INTEIRO = primeira query, ELSE segunda query if ($comprimento == '' and $tipo == 'Inteiro'){ mysqli_query($conec,"INSERT INTO produtos (tipo, marca, comprimento, diaexterno, diainterno) VALUES ('$tipo', '$marca', '1000', '$externo', '$interno')"); } elseif ($comprimento == '' and $tipo == 'Pedaço') { $return["result"] = "error"; $return["message"] = "Os seguintes valores são obrigatórios:\\n• Comprimento."; die ( json_encode ( $return); } else { mysqli_query($conec,"INSERT INTO produtos (tipo, marca, comprimento, diaexterno, diainterno) VALUES ('$tipo', '$marca', '$comprimento', '$externo', '$interno')"); } } // ENCERRA O LAÇO DE REPETIÇÃO "FOR" $return["result"] = "ok"; $return["location"] = "/cadastro/produto.php"; die ( json_encode ( $return); ?> 

我不知道如何解决此问题,所以我做了一个变通办法

我将说明如何解决该问题,因此遇到相同问题的任何人都可能会发现有帮助

首先,在php代码的末尾,我简单地添加了以下行:$ _SESSION [“ pagina”] =“ cadastro_produto”;

之前:header(“ location:/main.php”);

然后,在我的main.php中,我这样做了:$ teste = $ _ SESSION [“ pagina”];

在div的“内容”中,我做了这个

 <?php if ($teste == 'cadastro_produto'){ echo '<div id="caixa"> Cadastrado com sucesso.</p> voltar </div>'; //header("location: /cadastro/produto.php") } $_SESSION["pagina"] = ""; ?> 
我把$ _SESSION [“ pagina”] =“”; 最后,所以我可以将变量teste设置为空白,这样刷新页面不会使它再次出现

我知道这不是解决问题的最佳方法,但它对我有效,足以满足我的需求

另外,如果“ insert into”成功或不成功,我将需要弄清楚如何制作返回消息,这样我就可以返回msg并在表单中回显返回按钮

这个解决方案解决了我的问题,但是我感谢所有尝试提供帮助的人

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM