2016-09-29 42 views
-1

我試圖從方法調用GET方法調用傳遞參數到POST方法。 GET方法正在加載window.onloadPOST函數不在onload調用,否則POST函數將觸發一旦窗口已加載。當我點擊一個按鈕時,我只想觸發POST函數。從jQuery中的onload承諾傳遞變量

如何將一個變量從onload AJAX調用傳遞給我的POST函數?

我能想到的唯一方法是使用global變量,但我不認爲這是將它傳遞給另一個函數的好方法。

window.onload = function() { 
    function firstCallBack() { 
     $.get('http://website.com/API/docs/v1').then(function(data1){ 
      var passThis = "PassMeToPOST"    
     }).then(function (data2) {    
     }) 
    } 
} 

POST功能

function saveSettings(passThatVar) { 
    var urlVal = window.__env.url+ "Preview/TypeDefinition"; 
    var xslSettingVal = $('#PreviewXml').val().replace(/\n/g, ""); 
    var allData = { 
     'ObjectName': passThatVar, 
     'DisplayDefinition': setting, 
    } 

    $.ajax({ 
     url: urlVal, 
     type: "POST", 
     data: JSON.stringify(allData), 
     success: function (data) { 
      console.log('success'); 
     } 
    }); 
} 

按鈕HTML:

<button onclick="saveSetting()"> Save Setting </button> 
+0

你應該將它們保存在某個地方,因爲第二個功能是點擊事件。 – Petroff

+0

你的電話都不是同步的(這是件好事) –

+0

@RoryMcCrossan我的意思是承諾,我應該改寫標題哈哈。 – nCore

回答

-2

你基本上詢問如何保持一個變量排除在全球範圍內的。這被稱爲封裝。這是一個很好的本能,但是一個很大的話題。這裏是一個我喜歡的主題的帖子:http://javascriptissexy.com/oop-in-javascript-what-you-need-to-know/

這樣做的一個低預算的方法是,而不是爲您的值做一個全局變量,爲您自己使用一個全局名稱空間。

var MyUniquelyNamedThing = {}; 
... 
// get response: 
MyUniquelyNamedThing.ThatValueINeed = data; 
... 
// posting: 
data = { val1: MyUniquelyNamedThing.ThatValueINeed , etc. }; 
2

試試這個:

您的按鈕:

<button id="save-settings"> Save Setting </button> 

的GET請求後,設置數據屬性給您的按鈕:

function firstCallBack() { 
    $.get('http://website.com/API/docs/v1').then(function(data1){ 
     $("#save-settings").data("passMe", "PassMeToPOST"); 
    }).then(function (data2) {    
    }) 
} 

綁定click事件(它是使用內聯事件的最佳實踐):

$("#save-settings").on("click", saveSetting); 

在您saveSetting()功能:

function saveSetting() { 
    var allData = { 
     'ObjectName': $(this).data("passMe"), 
     'DisplayDefinition': setting, 
    } 
    //... your post request 
} 

您還可以檢查GET請求啓動後請求之前完成(以避免在極端情況下的錯誤):

if (!$(this).data("passMe")) { 
    return; 
} 
+0

「objectName」中的數據看起來不像是傳遞,你在哪裏使用'if'條件? – nCore

+1

@nCore如果應該在你的函數很開始,爲了取消它。那麼,我不知道發生了什麼,但它應該工作。 – DontVoteMeDown

+0

是的,它現在工作的很好,只是我的'get'請求需要時間來完成。我正在使用angular2,瀏覽器同步檢查每個文件的更改,因此如果我重新加載頁面,它將重新運行腳本。 – nCore