首页 > 解决方案 > 我该怎么办: var value = foo(bar); 其中 foo 是一个通过 JSON 请求查找值的函数

问题描述

来自 PHP 背景的我在使用 JavaScript 和 jQuery 编程时经常遇到这种问题。我需要一个需要获取变量并进行服务器查找以获取状态结果的函数。

与其在 4 个不同的地方重复相同的代码(我现在正在做,但我的老板不喜欢),我更希望它是一个我可以从任何地方调用的函数。

实际代码要复杂得多,出于这个问题的目的,我将其简化为基本概念。

我尝试使用“async:false”,以便该函数在返回之前等待 ajax 调用完成,但它不起作用。

解决方案可能是使用回调函数。这究竟是如何工作的,我需要如何构建我的代码以在我的应用程序(代码)的不同位置普遍实现这一点?

var sample = "ABC12345";
var samplestatus = getStatus(sample);
console.log("!!!!" + samplestatus + "!!!!");        

function getStatus(samplenumber) {  
    var jsonurl =  "lookup.php?s="+samplenumber;
    $.ajax({
        url: jsonurl,
        dataType: 'json',
        async: false,
        success: function(data1) {
            var s_status;
            if (typeof(data1[0]) !== 'undefined') {
                var data = data1[0];
                s_status = data.STATUS;
                console.log("Sample " + samplenumber + " has a status of "+s_status);
                return(s_status);
            } else {
                return(0);  
            }
        }
    });     
}

输出:

Sample ABC12345 has a status of COMPLETED
!!!!undefined!!!!

标签: jqueryajaxfunction

解决方案


您应该从您调用的函数返回。

function getStatus(samplenumber) {
    var jsonurl  ="lookup.php?s="+samplenumber;

    return $.ajax({
        url: jsonurl,
        dataType: 'json',
        async: false,
        success: function(data1) {
            var s_status;
            if (typeof(data1[0]) !== 'undefined') {
                var data = data1[0];
                s_status = data.STATUS;
                console.log("Sample " + samplenumber + " has a status of "+s_status);
                return s_status;
            } else {
                return 0;  
            }
        }
    });
}

推荐阅读