Javascript 如何将variables对象从括号中取出,或者是否有任何方法全局声明变量

Javascript 如何将variables对象从括号中取出,或者是否有任何方法全局声明变量,javascript,sapui5,Javascript,Sapui5,如您所见,这里我可以得到括号({})内的变量;如何在括号外获取相同的变量对象,类似于这样的 var oModel = new sap.ui.model.odata.ODataModel(url, true, username, password); oModel.read('/', null, null, true, function(oData, oResponse) { var dataget = JSON.stringify(oData);

如您所见,这里我可以得到括号({})内的变量;如何在括号外获取相同的变量对象,类似于这样的

var oModel = new sap.ui.model.odata.ODataModel(url, true, username, password);  
oModel.read('/', null, null, true, function(oData, oResponse)
{
        var dataget = JSON.stringify(oData);        
        var count = oData.results[0].Ort01;
        var Name1 = oData.results[0].Name1;
        var Kunnr = oData.results[0].Kunnr;
        alert(count + "  " +Name1 + "  " +Kunnr);   
});     

有人能帮我吗。谢谢

我不确定您要实现什么,但您声明的函数似乎是回调函数。这意味着它将异步执行,因此不能简单地将代码添加到oModel.read行之后

var oModel = new sap.ui.model.odata.ODataModel(url, true, username, password);  
    oModel.read('/', null, null, true, function(oData, oResponse)
    {   
    }); 
var dataget = JSON.stringify(oData);        
var count = oData.results[0].Ort01;
var Name1 = oData.results[0].Name1;
var Kunnr = oData.results[0].Kunnr;
alert(count + "  " +Name1 + "  " +Kunnr); 
但是,您可以在方法调用之前声明这些变量,并在回调方法中使用它们,但您必须意识到,您无法知道回调函数将在何时执行,因此无法确定这些变量何时将包含任何数据

var oModel = new sap.ui.model.odata.ODataModel(url, true, username, password);

var successCallBack = function(oData,oResponse) {
     var dataget = JSON.stringify(oData);      
     var count = oData.results[0].Ort01;
     var Name1 = oData.results[0].Name1;
     var Kunnr = oData.results[0].Kunnr;
     alert(count + "  " +Name1 + "  " +Kunnr); 
};

oModel.read('/', null, null, true, successCallBack); 
上面的例子展示了如何做到这一点,但无论如何,这并不是一个好方法。我认为您应该修改整个执行流程,因为它是异步执行的。我的意思是,您应该理解,执行流将在回调函数内部而不是外部继续:

var count;
var Name1;
var Kunnr;
var oModel = new sap.ui.model.odata.ODataModel(url, true, username, password);  
oModel.read('/', null, null, true, function(oData, oResponse)
{
    var dataget = JSON.stringify(oData);
    count = oData.results[0].Ort01;
    Name1 = oData.results[0].Name1;
    Kunnr = oData.results[0].Kunnr;
    alert(count + "  " +Name1 + "  " +Kunnr);
});

// Here you can reference to count those variables but you need to make sure
// that callback function is executed already

只需将read方法中的mParameters.async从true切换到false。这将把异步请求更改为同步请求,它将工作。

oData是作为回调响应接收的数据,所以您无法从外部获取它们。当然,您可以先将它们放在内部,然后在不使用var的情况下全局声明dataget。您可以建议我如何在前面不使用var的情况下声明globallyuse“dataget=JSON.stringify(oData)”吗?这样您就可以使用您的变量了globally@trainoasis-这并没有宣布它们,当那行代码执行时,它会创建全局对象的属性。@RobG你是对的-这就是我的意思sry:)只喜欢代码的答案。解释问题所在以及代码修复问题的原因。
var variableDefinedBeforeCallback = .....;
...
var oModel = new sap.ui.model.odata.ODataModel(url, true, username, password);  
oModel.read('/', null, null, true, function(oData, oResponse)
{
    var dataget = JSON.stringify(oData);
    var count = oData.results[0].Ort01;
    var Name1 = oData.results[0].Name1;
    var Kunnr = oData.results[0].Kunnr;
    alert(count + "  " +Name1 + "  " +Kunnr);

    // If you want to do something with those variables you can call any function
    // here and pass variables defined also before this callback
    anyFunction(variableDefinedBeforeCallback, count, Name1, Kunnr, ...);
});