2012-01-31 79 views
0

這是我正在嘗試做的。我試圖從數據庫中提取數據並創建一個新用戶,並繼續檢查新用戶的每一秒以及之前用戶位置的變化(我正在使用Android應用程序跟蹤GPS)。每次將新用戶添加到數據庫時,我都需要能夠創建一個新實例,但我不確定如何執行此操作。我已經看到下面的例子,但是這些對象是在程序中定義的,並不是「自動」創建的。自動創建從Javascript數據庫中拉出的對象

function cat(name) { 
this.name = name; 
this.talk = function() { 
    alert(this.name + " say meeow!") 
    } 
} 

cat1 = new cat("felix") 
cat1.talk() //alerts "felix says meeow!" 

cat2 = new cat("ginger") 
cat2.talk() //alerts "ginger says meeow!" 

比方說,我想從數據庫中提取貓的名字,並在每秒鐘檢查新的。我將有一個PHP程序,將其作爲JSON提取並返回給此JS程序,但是如何使用函數實例化新的「貓」?任何幫助將不勝感激。謝謝!

回答

1

我不會與長輪詢或什麼過分複雜化此方法 - 讓你的緣故開始我就假設你可以使用setTimeout()來每三十秒檢查一次新用戶或其他事物。與您現有的cats()構造堅持,你可以做這樣的事情:

var cats = []; 

function checkForNewCats() { 
    $.ajax({ 
     url: "getcats.php", 
     data : { lastCat : (cats.length == 0 ? "" : cats[cats.length-1].name) } 
    }) 
    .done(function(data) { 
     $.each(data, function(i, val) { 
     cats.push(new cat(val.name)); 
     }); 
    }) 
    .fail(function() { 
     alert("Something went horribly wrong"); 
    }) 
    .always(function() { 
     setTimeout(checkForNewCats, 30000); 
    }); 
} 

checkForNewCats(); 

使包括陣列cats來存儲所有的對象,然後一個函數,反覆做一個Ajax請求幾次一分鐘檢查爲新的貓,並將其添加到陣列。

這假定由PHP返回的JSON是貓對象的數組類似:

[ 
    { "name" : "fluffy" }, 
    { "name" : "sneezy" }, 
    { "name" : "ned" } 
] 

很明顯,您可以爲每隻貓添加額外的屬性。據推測,你的真實世界的應用程序會有某種用戶ID,名稱和你提到的GPS位置。

data屬性,我對Ajax請求設置:

data : { lastCat : (cats.length == 0 ? "" : cats[cats.length-1].name) } 

基本上是通過最後的貓的名字,並把它留給PHP來然後返回只因爲那一個加入貓的名字。顯然,在真實世界的應用程序中,您可以使用用戶標識或記錄時間戳來實現此目的。

編輯:老語法jQuery的阿賈克斯 -

function checkForNewCats() { 
    $.ajax({ 
     url: "getcats.php", 
     data : { lastCat : (cats.length == 0 ? "" : cats[cats.length-1].name) }, 
     success : function(data) { 
     $.each(data, function(i, val) { 
      cats.push(new cat(val.name)); 
     }); 
     setTimeout(checkForNewCats, 30000); 
     } 
    }); 
} 
+0

OK,這是開始變得有意義。我實現了你的代碼,但是我不斷收到錯誤,提示「Uncaught TypeError:Object#沒有方法'失敗'」它似乎不理解.success,.fail或.always方法。這些應該在$ .ajax方法中嗎? – mkyong 2012-01-31 11:03:23

+0

我很抱歉,我給了你一個jQuery Ajax解決方案,即使在你的問題中沒有提及jQuery,我認爲我包含在'.done()','.fail()'和'.always )'僅適用於版本1.5以上的版本 - 它使用較新的延遲對象樣式。我編輯了我的問題,以顯示它如何與舊樣式成功處理程序一起看。 (對不起,我沒有時間給出一個非jQuery的Ajax解決方案。)雖然在某處可能有語法錯誤 - 我實際上無法測試它,因爲我沒有服務器端部分解決方案... – nnnnnn 2012-01-31 11:25:44

+0

嗯,我想出瞭如何以不同的方式實現它,但這絕對有助於我更好地理解它。謝謝你的幫助! – mkyong 2012-01-31 13:03:59

0

像這樣的事情我會想:

$.getJSON('http://yourserver.com/somefunction/path', function(data){ 
    $.each(data, function (key, value) { 
     var anotherCat = new cat(value); 
     anotherCat.talk(); 
    }); 
});