簡體   English   中英

從函數返回值之前保存的空變量

[英]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或通過控制台調試時,它才能正常工作

我也嘗試使用deferredwhen使用,但沒有用。 只有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函數返回內容的值之前,調用了保存部分

我曾使用deferredwhen解決此問題。 一旦內容從函數返回值,就會調用其余代碼來保存它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM