我想在此处应用getStatus
功能:
function getStatus(id)
{
$.ajax({
method: "POST",
url: '<?php echo base_url('marketplace/get_store_status'); ?>/'+id,
dataType: 'json',
success: function(data){
return data.status;
}
});
}
在这里进入这个功能:
$('#store-status').click(function() {
var id = getStatus(<?php echo $vendor->store_id; ?>);
if (id == 1) {
$('#btn-status')
.removeClass('btn-danger')
.addClass('btn-primary')
.text('Activate');
} else {
$('#btn-status')
.removeClass('btn-primary')
.addClass('btn-danger')
.text('Deactivate');
}
console.log(id);
$('#modal-status').modal('show');
});
但是当我将元素点击功能中的id
变量记录到控制台时,它会显示undefined
。
但是当我从getStatus函数本身记录成功数据时,它会显示正确的数据。我的代码中我做错了什么?
答案 0 :(得分:2)
Ajax调用是异步的。你需要传递一个回调。
你也可以让它同步,但这会延误你的页面,如果通话需要更长时间会导致问题
function getStatus(id, callback)
{
$.ajax({
method: "POST",
url: '<?php echo base_url('marketplace/get_store_status'); ?>/'+id,
dataType: 'json',
success: function(data){
callback && callback(data.status);
}
});
}
$('#store-status').click(function() {
var id = getStatus(<?php echo $vendor->store_id; ?>, function(id), {
// the code here
});
});
答案 1 :(得分:0)
问题是var id = getStatus(<?php echo $vendor->store_id; ?>);
之后的代码在没有等待响应的情况下运行,因为您进行了异步调用。
一种解决方案是将async
设置为false
以使呼叫同步,但不建议这样做。
$.ajax({
method: "POST",
async: false,
url: '<?php echo base_url('marketplace/get_store_status'); ?>/'+id,
dataType: 'json',
success: function(data){
return data.status;
}
});
另一个更好的解决方案是使用回调函数。