[英]empty variable getting saved before value is returned from a function
我正在嘗試使用以下查詢保存數據
var content = framejson($(e.target));
//alert(wpId);
var dfd = $.Deferred();
setTimeout(function(){
saveWebPartProperties(wpId, { Description: content }).done(function () {
dfd.resolve();
$(e.target).closest("table").find(".successmessage").show();
}).fail(self.error);
},500);
以下是framejson的代碼
function framejson(elem){
var listname={};
listname["Name"] = $(elem).closest("table").find(".Name").val();
listname["Length"] = $(elem).closest("table").find(".Length").val();
return JSON.stringify(listname);
};
現在在我嘗試保存json內容的代碼中,刪除警報或刪除setTimeout
時將保存空值
僅當我有警報或setTimeout
或通過控制台調試時,它才能正常工作
我也嘗試使用deferred
, when
使用,但沒有用。 只有setTimeout使它工作,我試圖理解為什么
var content = $.Deferred();
content.resolve(framejson($(e.target)));
$.when(content).done(function(){
var dfd = $.Deferred();
saveWebPartProperties(wpId, { Description: content }).done(function () {
dfd.resolve();
$(e.target).closest("table").find(".successmessage").show();
}).fail(self.error);
});
導致此問題的錯誤是什么?
如您在此代碼段中所見,這很好用。 因此,我想您的問題不在此顯示的代碼中。
$(".test").on('click', function(e){ var content = framejson(e.target); console.log(content) }); function framejson(elem){ var listname={}; listname["Name"] = $(elem).closest("table").find(".Name").val(); listname["Length"] = $(elem).closest("table").find(".Length").val(); return JSON.stringify(listname); };
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <table> <tr> <td><input class="Name" value="bla" /></td> <td><input class="Length" value="ert" /></td> <td><button class="test">test</button></td> </tr> </table>
下面的代碼有效,
var wpId=$(e.target).parents().closest(".ms-rtestate-field").parent().attr("webpartid");
var content = $.Deferred();
content.resolve(framejson($(e.target)));
$.when(content).done(function(value){
var dfd = $.Deferred();
saveWebPartProperties(wpId, { Description: value }).done(function () {
dfd.resolve();
$(e.target).closest("table").find(".successmessage").show();
}).fail(self.error);
});
我認為原因是,在從framejson函數返回內容的值之前,調用了保存部分
我曾使用deferred
和when
解決此問題。 一旦內容從函數返回值,就會調用其余代碼來保存它
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.