Javascript 在localStorage HTML5上存储FormData对象
我正在尝试将一些数据保存到脱机应用程序上的localStorage。当用户处于脱机模式时,浏览器将从表单、FormData对象收集数据,并将其存储到localStorage;当浏览器处于联机状态时,它将通过jQuery ajax将存储在localStorage中的FormData对象推送到服务器。其复杂性在于表单具有动态字段,并且可以具有fileupload字段,问题在于html5上的localStorage支持数据作为字符串而不是对象Javascript 在localStorage HTML5上存储FormData对象,javascript,jquery,ajax,html,Javascript,Jquery,Ajax,Html,我正在尝试将一些数据保存到脱机应用程序上的localStorage。当用户处于脱机模式时,浏览器将从表单、FormData对象收集数据,并将其存储到localStorage;当浏览器处于联机状态时,它将通过jQuery ajax将存储在localStorage中的FormData对象推送到服务器。其复杂性在于表单具有动态字段,并且可以具有fileupload字段,问题在于html5上的localStorage支持数据作为字符串而不是对象 Collection.prototype.storeOff
Collection.prototype.storeOfflineData = function(collectionId){
var formData = new FormData($('form')[0]);
pendingSites = {"collectionId" : collectionId, "formData" : formData};
window.localStorage.setItem("offlineSites", JSON.stringify(pendingSites));
Collection.prototype.goHome();
Collection.prototype.showErrorMessage("Successfully store data in offline.");
}
当浏览器联机并连接到internet时,我创建了从本地存储读取FormData并向服务器发出ajax请求的方法,但ajax请求出错,因为JSON.parse返回“[object]”
这对我来说很好,可能是FormData对象不符合JSON标准,你能提供FormData的输出吗,只需做控制台。log(FormData)你使用FormData对象而不是仅仅存储表单字段的值有什么原因吗?FormData{append=append()}但是在stringify和使用JSON.parse之后返回对象{}. 我认为Stringify可能会更改FormData对象。@Musa我的表单是动态表单。所以我需要一个FormData对象来获取表单中的所有数据,并通过jQueryAjax发送到服务器
Collection.prototype.pushingPendingSites = function(){
pendingSites = JSON.parse(window.localStorage.getItem("offlineSites"));
if(pendingSites != null){
console.log(pendingSites[i]["formData"]);
Collection.prototype.ajaxCreateSite(pendingSites[i]["collectionId"], pendingSites[i]["formData"]);
}
}
Collection.prototype.ajaxCreateSite = function(collectionId, formData){
$.ajax({
url: '/mobile/collections/' + collectionId + '/sites', //Server script to process data
type: 'POST',
success: function(){
Collection.prototype.goHome();
Collection.prototype.showErrorMessage("Successfully saved.");
},
error: function(data){
Collection.prototype.showErrorMessage("Save new site failed!");
},
data: formData,
cache: false,
contentType: false,
processData: false
});
}