Javascript jQuery/CreateJS$.ajax“;位图未定义";
我继承了一个基于CreateJS和jQuery的产品设计器 $.ajax调用封装在名为UrlLoader的函数中Javascript jQuery/CreateJS$.ajax“;位图未定义";,javascript,jquery,json,createjs,Javascript,Jquery,Json,Createjs,我继承了一个基于CreateJS和jQuery的产品设计器 $.ajax调用封装在名为UrlLoader的函数中 function UrlLoader(params) { $.ajax({ url: url, type: 'POST', data: postData, contentType: "application/x-www-form-urlencoded",
function UrlLoader(params) {
$.ajax({
url: url,
type: 'POST',
data: postData,
contentType: "application/x-www-form-urlencoded",
beforeSend: function () {
console.log('sending');
},
success: function (result) {
self.sucess(result);
},
error: function (xhr) {
console.log("Error: " + xhr.statusText);
}
}).fail(function () {
self.showError("Can't load remote data");
});
}
UrlLoader(params)函数不提供其他函数作为$.ajax调用的包装器
params是一个JavaScript对象:
创建并保存设计后,系统将按预期工作。
当保存的设计从保存到的同一个源加载,然后再次保存时,ajax调用会自动失败,没有错误
在try…catch块中仅包装$.ajax调用会出现以下错误:
TypeError: bitmap is undefined
初始保存和后续保存的对象几乎相同。两者都包含图像对象的相同dataurl,另一个区别是其中一个具有“id”:12474,元素。两者都是格式正确的JavaScript对象
这个错误似乎是CreateJS错误,在jQueryAjax调用中对我来说没有意义
如何确定此错误的来源?我发现了问题。使用$.extend从CreateJS对象克隆对象。这显然也克隆了一些未知的CreateJS方法 更改:
var postData2 = $.extend(true, {}, self.params.params);
致:
似乎去掉了不必要的方法调用
关于这项工作的潜在机制的额外反馈将非常棒。我发现了问题所在。使用$.extend从CreateJS对象克隆对象。这显然也克隆了一些未知的CreateJS方法。将其更改为var postData2=$.extend(true,{},self.params.params);var postData=JSON.parse(JSON.stringify(postData2));似乎去掉了不必要的方法调用。当在js中相等对象时,您是通过引用传递的。当您将JSON.parse与JSON.stringify一起使用时,将为该对象创建一个新的内存指针并通过值传递。
var postData2 = $.extend(true, {}, self.params.params);
var postData = JSON.parse(JSON.stringify(postData2));