2013-03-26 68 views
2

我正在用jQuery更新我的数据库.click(),然后调用我的AJAX;我的问题是一旦SQL运行了什么是刷新页面上的内容的最佳方式,所以我将能够再次执行上一个操作,目前我使用的是window.location.reload(true);,但我不喜欢这种方法,因为我不喜欢“吨要在页面重新加载所有我要的是我用更新它是相匹配的数据库字段的AJAX成功后的元素有关的内容成功后jQuery AJAX刷新页面内容

这里是我的jQuery:

$(document).ready(function(){ 
    $("span[class*='star']").click(function(){ 
     var data = $(this).data('object'); 

     $.ajax({ 
      type: "POST", 
      data: {art_id:data.art_id,art_featured:data.art_featured}, 
      url: "ajax-feature.php", 
      success: function(data){ 
       if(data == false) { 
        window.location.reload(true); 
       } else { 
        window.location.reload(true); 
       } 
      } 
     }); 
     console.log(data.art_featured); 
    }); 
}); 
编号:

我需要art_featured更新的类.star.star-color这取决于一个art_featured的价值的时候,基本上是在以往任何时候我呼应了art_featured我需要重新加载,一旦Ajax是成功的。

编辑:

$("span[class*='star']").click(function(){ 
    var data = $(this).data('object'); 
    var $this = $(this); //add this line right after the above 

    $.ajax({ 
     type: "POST", 
     data: {art_id:data.art_id,art_featured:data.art_featured}, 
     url: "ajax-feature.php", 
     success:function(art_featured){ 
      //remember $this = $(this) from earlier? we leverage it here 
      $this.data('object', $.extend($this.data('object')),{ 
       art_featured: art_featured 
      }); 
     } 
    }); 
    console.log(data.art_featured); 
}); 
+0

什么是需要更新的HTML元素?我们可以看到它吗?您还可以概述哪些元素特别需要更新,以便我们可以更好地解决手头的问题? – Ohgodwhy 2013-03-26 05:47:33

+0

您可以使用json响应并从匹配的json响应中替换旧的DOM html或值。 – 2013-03-26 05:51:03

+0

@Ohgodwhy谢谢,我只是更新了我的帖子。 – 2013-03-26 05:51:47

回答

1

如果你只是可以将MySQL数据库成功后返回art_featured,它会发送回阿贾克斯成功的功能。在这里,我们可以操作数据,但是,首先我们应该存储对被点击元素的引用。

var data = $(this).data('object'); 
var $this = $(this); //add this line right after the above 

现在我们成功的功能,而不是使用data只使用art_featured,因为这就是我们正在返回。现在我们可以更新目标上的现有数据对象。

success:function(art_featured){ 
    //remmeber $this = $(this) from earlier? we leverage it here 
    $this.data('object', $.extend($this.data('object'),{ 
     art_featured: art_featured 
    })); 
} 

以上将扩展现有数据对象,允许基于我们正在扩展的对象重新定义键:值对。

你应该发现这个按照预期工作。

+0

我得到这个想法,但是当我实现这个时,我必须重新加载页面,然后才能点击更改字段值,如返回1 1 1 1,但是如果我重新加载页面,则它会在我点击它时切换为0并生病重新加载页面来切换它agian – 2013-03-26 06:16:15

+0

@MitchellLayzell我很难理解。上面的代码中没有任何内容需要重新加载页面。如果您发回的数据*刚刚插入到数据库中*供我们使用,它将是基于上面给出的代码的最新数据。如果刷新页面,您应该从刚刚更新的同一个数据库中生成数据*,那么它会如何不同? * confused * – Ohgodwhy 2013-03-26 06:19:14

+0

对不起,我试着解释一下,当我点击我的跨度元素时,我运行一个更新语句,将我的字段从1改为0,反之,一旦语句完成,我希望能够再次单击该span元素要将此值从0更改为1,则问题在于查询运行并完成后,用于发送数据的值不会更新,直到页面重新加载,因此它会一直发送相同的值,直到页面重新加载并加载数据库中的新值 – 2013-03-26 06:24:31

0

我不完全明白你的问题让我们假设你要更改的内容与类的div一个div,并要更换只需发送即内容的内容数据。那么你就需要返回的数据(可能使用JSON是最容易),那么您的通话将

$.ajax({ 
     type: "POST", 
     data: {art_id:data.art_id,art_featured:data.art_featured}, 
     url: "ajax-feature.php", 
     dataType:'json', 
     success: function(data){ 
      for(n in data){ 
      $('.div').append('<p>'+data[n]+'</p>'); 
      } 
     } 
}); 

注意添加的dataType回报为JSON,然后再遍历数据由n的JSON数据,然后使用n从数组中调用数据。因此,如果第三个项目是名字,那么你可以做这样的事情

$('.div').append('<p>Name is '+data[3]+'</p>'); 

你将不得不通过编码JSON它可与json_encode PHP函数来完成从PHP形式返回数据。如果它是跨域的,你将不得不使用jsonp

编辑: 如果你在发送表单之前已经知道你想要替换的数据(即不需要响应),那么你可以将这些变量放入成功回电。这将等待ajax成功返回,然后更新你的div。

所以,你可以有这样的

var updateText = yourDataFromForm 

$.ajax({ 
     type: "POST", 
     data: {art_id:data.art_id,art_featured:data.art_featured}, 
     url: "ajax-feature.php", 
     dataType:'json', 
     success: function(data){ 

      $('.div').append('<p>'+updateText+'</p>'); 

     } 
}); 
+0

谢谢,但这将如何与HTML中的数据对象一起工作,因为我正在使用它,所以我可以使用该数据来处理Ajax并将该数据发送到mySQL语句,所以如何在我的html数据对象中选择某些内容, 谢谢! – 2013-03-26 06:02:39

+0

在你的ajax调用之前是什么?这是附加到jQuery点击或提交事件处理程序?你能发表你的表格的标记吗?我可能能够更好地提供一些更多信息。 – James 2013-03-26 06:10:44

+0

除了我以前的评论,你不需要像这样使用数据参数,如果它在表单中,你可以得到整个表单数据并使用jQuery .serialize - http://api.jquery.com/serialize/ – James 2013-03-26 06:12:37