【问题标题】:Reload content in div with switch case include使用 switch case 重新加载 div 中的内容包括
【发布时间】:2022-01-12 20:42:04
【问题描述】:

我是 Ajax 和 jQuery 的新手,问题是我有一个文件夹页面,其中是带有内容 div 的 php 页面。我想用内容而不是整个页面重新加载容器 div 我尝试了很多东西,但似乎没有任何帮助。这是我的 index.php 外观的一部分:

<?php include ('inc/nav.php'); ?>

        <div id="container">
            <?
            $type = $_GET["type"];
            switch ($type) {
                case "about" :
                    include "pages/about-us.php";
                    break;
                case "contact":
                    include "pages/contact.php";
                    break;
                default :
                    include "pages/homepage.php";
            }
            ?>
          </div>

在导航中,链接如下所示:

<ul class="main-menu">
    <li class="url"><a href="index.php?type=homepage">Homepage</a></li>
    <li class="url"><a href="index.php?type=about-us">About us</a></li>
    <li class="url"><a href="index.php?type=contact">Contact</a></li>
</ul>

我试图将 pages/about-us.php 中的内容放入 &lt;div id="container"&gt;&lt;/div&gt;,但它不起作用。这就是我的 ajax 脚本的样子:

//run on page load
$(function(){
    //bind a click event to the nav links
    $(".url a").on("click", function(e){

        //keep the links from going to another page by preventing their default behavior
        e.preventDefault();

        //this = link; grab the url
        var pageLocation = this.href;
        console.log(pageLocation);
        //fire off an ajax request
        $.ajax({
            url: pageLocation,

            //on success, set the html to the responsetext
            success: function(data){
                $("#container").html(data.responseText);
            }
        });
    });
});

【问题讨论】:

  • 您将在拉入 dom 时释放任何附加的 js 事件,但要回答 $("#container").html($(data.responseText).find('#container'));
  • 欢迎来到 Stack Overflow。 从 jQuery 3.0 开始,.bind() 已被弃用。自 jQuery 1.7 起,它已被用于将事件处理程序附加到文档的 .on() 方法取代,因此已不鼓励使用它。 请提供一个最小的、可重现的示例:stackoverflow.com/help/minimal-reproducible-example 最好也采用游览:stackoverflow.com/Tour
  • @LawrenceCherone 我用你的答案更新了代码,但是当我加载页面时它变空了
  • @Twisty 我已经更新了我的代码并提供了一个最少的代码
  • @5admin 您在控制台中看到任何错误吗?请求和响应是什么样的?

标签: php jquery ajax


【解决方案1】:

.load() 方法与$.get() 不同,它允许我们指定要插入的远程文档的一部分。这是通过 url 参数的特殊语法来实现的。如果字符串中包含一个或多个空格字符,则字符串中第一个空格之后的部分被假定为确定要加载的内容的 jQuery 选择器。

考虑以下示例。

$(function() {
  $(".url a").click(function(e) {
    e.preventDefault();
    var pageLocation = this.href + " #container";
    console.log(pageLocation);
    $("#container").load(pageLocation)
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="main-menu">
  <li class="url"><a href="index.php?type=homepage">Homepage</a></li>
  <li class="url"><a href="index.php?type=about-us">About us</a></li>
  <li class="url"><a href="index.php?type=contact">Contact</a></li>
</ul>
<div id="container">
</div>

这是未经测试的。您需要在自己的代码中对此进行测试。

查看更多:https://api.jquery.com/load/

【讨论】:

  • 成功了!但稍后如果我要发布表格等,这不会是一个问题?
  • @5admin 发布表单与单击链接完全不同,所以我怀疑它会是相同的代码。
  • 好的,但是现在我有一个问题,当我点击链接时,网址消失了,只变成了 domain.com/
  • @5admin 继续检查。您可以将此标记为答案,如果您找不到新问题的答案,请发布。
猜你喜欢
  • 1970-01-01
  • 2011-11-05
  • 2017-03-15
  • 2013-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-01
  • 1970-01-01
相关资源
最近更新 更多