【问题标题】:Unable to set variable based on JSON Output无法根据 JSON 输出设置变量
【发布时间】:2021-08-21 17:10:54
【问题描述】:

我有一个检索一些 JSON 数据的 api 调用,如果有一个名为 result 的列是空白的,我想设置一个变量。

当我运行代码时,如果它满足这个条件,它会设置 UncompletedProcesses = true 但是当我最后检查它时它说它是未定义的。

if ((URMajIssues == true) && (URDeviation == false) && (UncompletedProcesses == true)) 

这是我正在使用的代码,请问我做错了什么:

//Check to see if all processes have been completed on all stages
var UncompletedProcesses
var request = new XMLHttpRequest()
var stage = 0; 
var ModuleIdent = '@HttpContext.Session.GetString("sesMIdent")'
// Open a new connection, using the GET request on the URL endpoint
request.open('GET', 'https://xxxxxxx.azurewebsites.net/api/rou/' + stg + '/' + MIdent +'/5317dba3', true)


request.send = function () {

    // Begin accessing JSON data here
    var data = JSON.parse(this.response)

    data.forEach((data) => {
        if (data['result'] == '')
        {
            UncompletedProcesses = true;
        }
    })
}
// Send request
request.send()

alert(UncompletedProcesses)
if ((URMajIssues == true) && (URDeviation == false) && (UncompletedProcesses == true)) {
          
    document.getElementById('lblWarningMsg').innerText = 'A Major issue has been identified. This needs to be repaired'
    
    $('#modal-warning').modal({ backdrop: 'static', keyboard: false })
}

非常感谢您的帮助。

【问题讨论】:

  • 我们可以看看json响应的样本吗?
  • URMajIssuesURDeviation 定义在哪里?

标签: javascript c# asp.net-core


【解决方案1】:

您的代码存在几个问题,如下所示。

Send 函数的无意重定义

我认为这个小sn-p代码在这里是不正确的:

request.send = function () {
    // Begin accessing JSON data here
    var data = JSON.parse(this.response);

    data.forEach((data) => {
        if (data["result"] == "") {
            UncompletedProcesses = true;
        }
    });
}

正在发生的事情是“发送”的底层实现正在用您的逻辑重写,这是不正确的。

这里真正需要做的是在您的请求对象上定义onreadystatechange 方法,如下所示:

request.onreadystatechange = function () {
    // Begin accessing JSON data here
    var data = JSON.parse(this.response);

    data.forEach((data) => {
        if (data["result"] == "") {
            UncompletedProcesses = true;
        }
    });
}

代码流更改

另一个问题是代码流。为处理响应而定义的onreadystatechange function 还应包括警报逻辑和URMajIssues / URDeviation 变量的检查。

如果您将代码的 sn-p 留在原处,它将在服务器提供响应之前很久就运行。 onreadystatechange 函数只会在服务器响应时被调用,因此任何依赖于该结果的代码也应该在这个函数中。

以下是代码流应该是这样的:

//Check to see if all processes have been completed on all stages
var UncompletedProcesses;
var request = new XMLHttpRequest();
var stage = 0;
var ModuleIdent = '@HttpContext.Session.GetString("sesMIdent")';
// Open a new connection, using the GET request on the URL endpoint
request.open("GET", "https://xxxxxxx.azurewebsites.net/api/rou/" + stg + "/" + MIdent + "/5317dba3", true);

request.onreadystatechange = function () {
    // Begin accessing JSON data here
    var data = JSON.parse(this.response);

    data.forEach((data) => {
        if (data["result"] == "") {
            UncompletedProcesses = true;
        }
    });
    
    alert(UncompletedProcesses);
    if (URMajIssues == true && URDeviation == false && UncompletedProcesses == true) {
        document.getElementById("lblWarningMsg").innerText = "A Major issue has been identified. This needs to be repaired";
        $("#modal-warning").modal({ backdrop: "static", keyboard: false });
    }
};

// Send request
request.send();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-06
    • 1970-01-01
    • 2015-08-02
    • 2016-04-16
    • 2019-12-16
    • 1970-01-01
    • 2021-01-17
    • 2022-06-29
    相关资源
    最近更新 更多