jquery - 我该怎么办: 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!!!!
解决方案
您应该从您调用的函数返回。
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;
}
}
});
}
推荐阅读
- c# - c#'HttpContext'不包含'Current'的定义,无法读取我的Web应用程序上的发布值
- r - 如何使用两个参数向量评估函数值
- blazor - Blazor PWA 魔法使基本功能消失
- mongodb - 集合为空时的spring-data-mongodb计数错误
- html - Bootstrap 导航栏会切换
- matlab - Matlab中的数据分析
- javascript - HTML 视频中的视频略读
- javascript - 我可以通过设置 _idleTimeout 成员来更改 setTimer 对象的超时值吗?
- vue.js - 更改 Vuetify 中列表项的背景颜色
- arrays - 我们如何将向量添加到矩阵的单列?