【问题标题】:PHP/AJAX: Can't seem to be able to display ajax result into DIV, but works in ALERT()PHP/AJAX:似乎无法将 ajax 结果显示到 DIV,但在 ALERT() 中有效
【发布时间】:2013-03-21 15:41:17
【问题描述】:

我目前正在通过一个真实的网站项目学习 PHP,并希望使用 Ajax 调用来更改网站的各个部分。

代码示例

我的项目.js

$(document).ready(function() {
    $("#inventory").click(function() {
        $.ajaxSetup({
            url: "sectionhandler.php?section='inventory'",
            type: "get",
            dataType: "html"
        });
        $.ajax().done(function(html) { 
            alert(html); // This works!
            $("#section").html(html); // This doesn't work.
            $("#section").append(html); // This neither.
        });
    });
});

inventory.html

<table><tr><td>Hello world with AJAX!</td></tr></table>

sectionhandler.php

<?php echo file_get_contents( 'inventory.html' ); ?>

menu.html

<a id="inventory" href="">Inventory</a>

index.php

<div id="menu" class="content"><?php echo file_get_contents( 'menu.html' ); ?></div>
<div id="section" class="content"></div>

相关文章被发现、阅读和尝试

  1. XMLHttpRequest won't work in IE 7/8 but works in other browsers
  2. jQuery.ajax()
  3. jQuery.ajaxSetup()
  4. .append()
  5. jquery .html() vs .append()
  6. Can't append HTML code into one div by using jQuery
  7. Add Html to Div with effect jQuery
  8. Use append() to add text/html to an element with jQuery

还有更多...

结果

当我单击包含在menu.html 中并通过index.php 显示的库存链接时,jQuery 代码执行得很好。我从服务器获取结果,同时在alert() 中显示来自inventory.html 的正确内容。

但是,当我将innerHTML 设置为&lt;div id="section" class="content"&gt;&lt;/div&gt; 时,我似乎无法获得预期的结果。页面的背景似乎在闪烁,尽管按照 Ajax 定义不应该如此,并且我的 XMLHttpRequest.responseText 的内容永远不会显示。

当我双击 Inventory 链接时,我越接近让它工作,所以在页面背景的第一次“闪烁”之后,它显示了我部分的内容。

我尝试了多种方法,在我的&lt;a&gt; 标记上使用带有onclick 元素的经典Javascript,我尝试使用document.getElementById("section"),虽然获得了正确的元素,但我无法在页面上显示我的内容。

欢迎提出任何想法!

提前致谢! =)

【问题讨论】:

  • 以下是警告内容:prntscr.com/ykc2n
  • 当我将&lt;?php echo file_get_contents( 'inventory.html' ); ?&gt; 直接写入index.php 文件中的div:#section 时,它如何工作,而在通过ajax 时不起作用?我错过了一些东西,我很困惑。 =)
  • 你可以试试$("#section").load("sectionhandler.php?section=inventory");而不是ajax,看看是否有效?
  • @Onimusha:这将是更好/更简单的方法。我马上试试这个! =)
  • @Onimusha:这也完美无缺,而且非常简单!我就喜欢!大声笑所有这些时间都花在了调查这个和那个解决方案上,有尽可能多的差异,太棒了!我一定会记住这一点的! =)如果您愿意,您可以将您的方法写为答案,以便我可以投票并帮助获得代表点。 =)

标签: php html jquery xmlhttprequest jquery-append


【解决方案1】:

您需要防止浏览器默认行为:

$("#inventory").click(function(event) {

    event.preventDefault();

    ...

});

注意event 添加到点击处理程序的参数。

顺便说一句,你的 HTML 响应是无效的 - &lt;table&gt; 应该包含一个 &lt;tbody&gt; 元素包装任何 &lt;tr&gt;s。

【讨论】:

  • +1&Accepted: event.preventDefault() 是解决方案! =) 我已经通过return false 阅读并尝试了这一点,这也阻止了默认行为,我在尝试时从未考虑过它,因为没有任何地方提到必须阻止浏览器的默认行为。谢谢!这解决了我的问题! =)
【解决方案2】:

根据要求。更简单的解决方案

$("#section").load("sectionhandler.php?section=inventory");

jQuery .load()

【讨论】:

  • +1 这帮助我实现了我所需要的。感谢您的答复! =)
猜你喜欢
  • 2015-10-15
  • 2017-01-25
  • 1970-01-01
  • 1970-01-01
  • 2013-04-21
  • 1970-01-01
  • 1970-01-01
  • 2015-06-08
  • 2012-12-18
相关资源
最近更新 更多