【问题标题】:Load div for ajax success为ajax成功加载div
【发布时间】:2013-10-03 00:19:10
【问题描述】:

以前有人问过这个问题,我确实环顾四周,尝试了很多方法,但没有执行。只有alert 函数似乎有效。在 ajax 中执行我的POST 后,我试图在success: 上加载一个小 div。这是我的代码:

$("#send").click(function(e) { e.preventDefault();

          $.ajax({
            type: 'POST',
            url: 'actions/update.php',
            data: $('#content').serialize(),
            success: function() {
          $(this).html('<div id="status">Saved!</div>');
          }
          });

        });

      $('#status').delay(5000).fadeOut(400);

我的 CSS 到这个 Div:

#status {
position:fixed;
top:50%;
left:50%;
z-index:100000;
width:150px;
height:150px;
margin:-75px 0 0 -75px;
background-color:rgba(0,0,0,0.7);
border-radius:150px;
font-size:30px;
line-height:150px;
font-weight:700;
color:#fff;
text-align:center;
cursor:default; }

我会在某处引起冲突吗?这是因为e.preventDefault(); 任何帮助或链接将不胜感激!

【问题讨论】:

  • success: 对象中取出它并使用.done().fail() 方法。

标签: javascript jquery css ajax


【解决方案1】:
$("#send").click(function(e) { e.preventDefault();
          var that = $(this);
          $.ajax({
            type: 'POST',
            url: 'actions/update.php',
            data: $('#content').serialize(),
            success: function() {
          that.html('<div id="status">Saved!</div>');

          $('#status').delay(5000).fadeOut(400);
          }
          });

        });

这里的问题是this 不是你认为的回调。试试上面的

编辑: 回应您的评论:

文本被新的div 覆盖。解决这个问题的一种方法是将新的 div 插入到原始元素的子元素中。要获得褪色效果,您还必须将其放入回调中。否则它将在 ajax 调用返回之前执行。这是因为 ajax 调用是异步的,并且在您等待服务器返回数据时,其余的 JavaScript 代码将继续执行

编辑2: 我不确定你点击的是什么类型的元素,但这里有两种方法:

1) 在被点击的元素中添加一个子元素 例如:&lt;a #id="send"&gt;&lt;div id=someElement&gt;&lt;/div&gt;&lt;/a&gt;

2) 在被点击的元素旁边添加一个元素,并使用新的 div 定位它

【讨论】:

  • 谢谢,这似乎可以解决问题,但是,提交按钮中的文本似乎消失了,我希望这与$("#send").click(function(e) { e.preventDefault(); 有关,您知道如何解决这个问题?
  • 再次感谢您,您的回复对我们很有帮助。我将努力将新的 div 放入子元素中,您是否有任何链接可以帮助更多地了解这个主题?非常感谢。
  • 只需将一个带有 id 的元素(例如:someElement)放在被点击的元素中,然后执行类似 that.find("#someElement").html("
    已保存!
    ");而不是当前行
  • 我很抱歉,我不想对你这样做,我的英语不是最好的,但你能详细说明在点击的元素中放置一个带有 id 的元素(例如:someElement)吗?
【解决方案2】:

在 $.ajax 回调中,上下文(this)默认是 $.ajax 返回的 jqXHR 对象。
但是,您可以使用 $.ajax 方法的配置对象中的 context 属性来设置您想要的任何内容。例如

  $.ajax({
    type: 'POST',
    url: 'actions/update.php',
    data: $('#content').serialize(),
    context: this, //<----
    success: function() {
      $(this).html('<div id="status">Saved!</div>');
    }
  });

这会将所有回调中的上下文设置为调用函数中的上下文。

【讨论】:

    【解决方案3】:
    $("#send").click(function(e) { 
        e.preventDefault();
        $.ajax({
            type: 'POST',
            url: 'actions/update.php',
            data: $('#content').serialize(),
        }).done(function() {
            $('#status').html('Saved!');
        });
    $('#status').delay(5000).fadeOut(400);
    <div id='status'></div>
    

    【讨论】:

    • @DevishOne - 我不知道谁对你投了反对票,但我想说你的回答很好。
    • 我认为他们改变了主意。大声笑...但是,谢谢。
    猜你喜欢
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2014-02-19
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    • 2016-10-26
    • 2015-01-29
    相关资源
    最近更新 更多