2014-10-02 19 views
0

我有一個網站,可以添加評論,這些評論只是臨時存儲,當您重新加載頁面評論消失。我使用knockout和javascript將評論數據保存在ObservAbleArrayList中。我的一個想法是將這個ObservAbleArrayList發送到我的服務器,存儲它,然後當頁面重新加載時,存儲的數組列表將首先更新註釋字段。我怎麼能用AJAX和PHP來做到這一點?使用PHP和AJAX存儲和訪問服務器上的數據

這裏是我的意見javascriptcode:

function Comment() { 
    var self = this; 

    self.nickname = ko.observable(); 
    self.newMsg = ko.observable(""); 
    self.editable = ko.observable(false); 

    self.addComment = function() { 
     vm.comments.push(self); 
     vm.selectedComment(new Comment()); 
    }; 

    self.deleteComment = function() { 
     vm.comments.remove(self); 
    }; 

    self.editComment = function() { 
     self.editable(!self.editable()); 
    }; 
} 

function ViewModel() { 
    var self = this; 
    self.comments = ko.observableArray(); 
    self.selectedComment = ko.observable(new Comment()); 
} 

var vm = new ViewModel(); 
ko.applyBindings(vm); 
}); 

任何幫助或例子將是非常有益的!提前致謝。

回答

0

將數據作爲JSON發送到服務器使用jQuery作爲您的橋樑來處理服務器端與它的包裝器$.ajax()包裝。

首先,您需要將數據變爲一個JSON對象,以便發送並輕鬆解析。在淘汰賽中,你可以使用一個ko對象的.toJSON(model)方法來得到它的JSON的解釋,如:

var jsonData = ko.toJSON(ViewModel); 

,這將給你的JSON字符串。這是準備好傳遞給服務器,所以現在你可以構建你的PHP腳本的$.ajax()調用。

$.ajax({ 
    url: '/path/to/my/script.ext', 
    type: 'GET', //default anyway, provided for clarity 
    dataType: 'json', //the returned data from the server will be automatically parsed as json 
    data: jsonData, //the KO model we converted earlier 
    success: function(data){ 
     //the server's response is in "data" above, jsonParsed already. 
    } 
}); 
+0

感謝您的回答!但要發送我的jsonData,我將不得不使用類型爲'POST'的ajax函數? 是否這樣? self.sendEntry =函數(){ $就({ 類型: 「POST」, URL: 「storage.php」, 數據:jsonData }); }; 然後再次檢索我可以使用你的GET方法? – 2014-10-02 09:31:58

+0

@Scatman_John你可以使用'POST'或'GET',這沒關係。它更多的是關於「語義上」正確的。你是否將數據發佈到服務器?或者,您是否將數據發送到服務器以產生響應?如果前者是'type','POST','如果後者',則輸入:'GET'。請記住,在PHP中,唯一的變化是'$ _POST',而不是'$ _GET' – Ohgodwhy 2014-10-02 09:33:40

+0

是的,我只是想將數據發佈到服務器,然後如果用戶刷新頁面,所有舊的評論仍然會那裏。所以我猜想當提交評論時,我將使用POST,並在pageref上運行一個GET函數。 – 2014-10-02 09:39:40

相關問題