2013-03-26 67 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