【问题标题】:Global Variable returning `undefined` when fetched获取时返回“未定义”的全局变量
【发布时间】:2021-09-13 19:49:24
【问题描述】:

基本上,我正在运行搜索查询。所有参数、变量等都可以正常工作。在成功事件的某一时刻,我必须运行一个收集好友请求状态的函数。这个搜索查询正在运行两个 api url,这意味着我必须从另一个函数导入数据。

问题是,我需要保存 data.sent 值,以便将其添加到搜索结果中。我这样做是为了不让用户收到朋友任务的垃圾邮件。但是,我使用的每种方法、谷歌和/或实验结果data.sent 成为undefined ..它也是一个全局变量。我真的不知道还能做什么。

这是我一直在研究的搜索查询功能。除了我运行fetchSTatus 函数的部分之外,它都很完美。

$(document).ready(function(){
    var person = new Object(); 
    $.ajax({  
        url: 'http://localhost:3000/customers/',  
        type: 'GET',  
        dataType: 'json',  
        data: person,  
        success: function (data, textStatus, xhr) {
                            
            $('#txt-search').keyup(function(){
                var searchField = $(this).val();
                if(searchField === '')  {
                    $('#filter-records').html('');
                    return;
                }
                
                
                var regex = new RegExp(searchField, "i");
                var output = '<div class="row">';
                var count = 1;
                $.each(data, function(key, val){
                    if(val.name === DefaultName) {
                        return;
                    }
                    
                    if ((val.name.search(regex) != -1) || (val.name.search(regex) != -1)) {
                        output += '<br><h5>' + val.name + '</h5>';
                        output += '<h5>' + val.uuid + '</h5>';
                        
                        fetchSTatus(val.uuid);
                        output += '<h5>' + senderPerson + '</h5>';
                        
                    }
                });
                output += '</div>';
                $('#filter-records').html(output);
            });
            
        },  
        error: function (xhr, textStatus, errorThrown) {  
            document.getElementById('error').style.color = 'red';
            const element = document.getElementById("error");
            element.innerHTML = "Error in Operation";
                            
            return console.log("Error in Operation");  
        }
    });
});

这是fectchSTatus 函数:

function fetchSTatus(x) {
    var person = new Object();
    $.ajax({  
        url: 'http://localhost:3000/friends/' + x ,  
        type: 'GET',  
        dataType: 'json',  
        data: person,  
        success: function (data, textStatus, xhr) {
            
            if(data.sender == Friend1 && data.reciver == x) {
                console.log(data.sender);
                console.log(Friend1);
                console.log(data.reciver);
                console.log(x);
                console.log(data.sent);
            };
            return senderPerson = data.sent;
            console.log(senderPerson);
        },
        error: function (xhr, textStatus, errorThrown) {  
            document.getElementById('error').style.color = 'red';
            const element = document.getElementById("error");
            element.innerHTML = "Error in Operation";
                            
            return console.log("Error in Operation");  
        }
        
    });
    
};

【问题讨论】:

  • 它也是一个全局变量”它不是。你有一个名为data 的参数,所以that 就是data。在您尝试访问data.sent 时,任何名为data 的外部变量均不可见。无论如何,为什么它甚至需要是全球性的?将其传递给fetchSTatus

标签: javascript jquery node.js function global-variables


【解决方案1】:

首先:

return senderPerson = data.sent;
console.log(senderPerson);

不会记录任何内容。 return 将立即退出函数。另请注意,您尚未在代码中声明 senderPerson 。最后返回的值没有被存储在任何地方。

您需要在脚本开始时创建一个全局变量:

$(document).ready(function(){
    var person = new Object(); 
    var senderPerson = null;

然后再做(在success函数里面,去掉return):

senderPerson = data.sent;
console.log(senderPerson);

【讨论】:

  • 哦,好吧,我试试你的建议。此外,上面的代码(两个 sn-ps)只是从文件中复制出来的部分。它们被声明了,只是上面的代码中没有提到
猜你喜欢
  • 2016-05-13
  • 1970-01-01
  • 2019-10-10
  • 1970-01-01
  • 1970-01-01
  • 2013-01-23
  • 2020-08-21
  • 2019-04-08
相关资源
最近更新 更多