我正在执行 AJAX 查询以将值分配给必须在另一个函数中声明的变量(我正在使用 React)。我有以下代码:
在函数 A 中:
var datos = getAllProfessionals();
在 getAllProfessionals() 中:
function getAllProfessionals() {
var jsonResponse;
$.ajax({
type: 'GET',
url: urlAjaxGetAllProfessionals, // Defined at HTML file
async: false
}).done(function(response) {
jsonResponse = response;
});
return jsonResponse;
},
我被迫输入,Async: false
因为没有这些数据,页面上就没有任何东西可以显示,而且如果或是否必须将其存储在数据中。但我做不到
...
}).done(function(response) {
return response;
});
如果我将变量排除在 $.ajax() 函数之外,则该值将丢失,因为它是异步的。
我有什么替代方法可以避免提出async: false
并收到没有问题的答案?
您必须记住,React 组件作为状态机工作,React 组件的数据始终来自状态或道具(属性),当您改变状态或道具时,React 组件会自动对这些更改做出反应并重新-renders 通过对 DOM 进行尽可能少的更改来进行必要的计算以修改视图。您的解决方案打破了整个概念,并且您没有将 React 用于创建它的目的,因为您没有根据服务器的响应改变状态,并且您没有使用 React 组件在视图中进行更新。
看看下面的实现(ES6)
ajax 请求是在安装组件时发出的,组件根据状态决定要渲染的内容,您只需改变状态,视图就会做出相应的反应。
您可以做的是在收到信息后调用一个函数(回调函数)。为此,您可以
success
在 ajax 调用中将属性与要向其传递数据的函数的名称放在一起,当接收到信息时,它将调用该函数,将接收到的信息作为参数传递。它会是这样的: