这是我的jquery代码:
function check_hotel_exists(value, col)
{
var url = base_url + 'ajax/checkuniquehotel';
var response = false;
$.get(url, {hotelname:value}, function(data){
if (data === 'true') response = true;
});
alert((response) ? 'Hotel is Not Existing' : 'Hotel Exists');
return [response, "That hotel already exists"];
}
响应的值不会改变。
如何使用get函数的回调更改响应值?我期待来自服务器响应的变量数据是'true'或'false'。
任何帮助将不胜感激。:)
答案 0 :(得分:3)
该值不会更改,因为在check_hotel_exists
函数退出后,应该将响应设置为true的ajax回调会异步执行。可能的解决方法是通过将async
选项设置为false
来同步执行ajax请求。
$.ajax({
url: base_url + 'ajax/checkuniquehotel',
async: false,
data: { hotelname: value },
success: function(result) {
if (result === 'true') response = true;
}
});
另一种解决方法是异步执行调用,但在这种情况下,所有工作都必须在success
回调中完成,您的函数不再需要返回值(例如,如果酒店显示错误消息)名称已存在于成功回调中)。恕我直言,这是一个更好的方法。
答案 1 :(得分:0)
所有ajax请求都是异步的,因此您无法根据ajax调用的结果创建返回某些内容的函数。您应该异步处理响应(例如:在完成ajax调用后更改页面上的一段文本):
function check_hotel_exists(value, col)
{
var url = base_url + 'ajax/checkuniquehotel';
$.get(url, {hotelname:value}, function(data){
var msg = (data === 'true') ? 'Hotel is Not Existing' : 'Hotel Exists';
$("#resultmsg").text(response);
});
}
答案 2 :(得分:0)
试试这个
function check_hotel_exists(value, col)
{
var url = base_url + 'ajax/checkuniquehotel';
var response = false;
$.get(url, {hotelname:value}, function(data){
if (data === 'true') response = true;
alert((response) ? 'Hotel is Not Existing' : 'Hotel Exists');
//this wont work, so do something else!!!!
//return [response, "That hotel already exists"];
});
}
答案 3 :(得分:0)
解决方案是让你的check_hotel_exists
函数轮流异步,即接收函数作为回调参数:
function check_hotel_exists(value, col, callback)
{
var url = base_url + 'ajax/checkuniquehotel';
var response = false;
$.get(url, {hotelname:value}, function(data){
if (data === 'true') response = true;
if (callback) {callback.call(response);}
});
}
通过这种方式,您可以在任何想要检查酒店存在的地方拨打电话:
check_hotel_exists(value, col, function(response){
alert(response);
});
答案 4 :(得分:-1)
肮脏的方法,但它的确有效:
将您的变量定义在回调函数之外:
var response = false;
function check_hotel_exists(value, col)
{
var url = base_url + 'ajax/checkuniquehotel';
response = false;
$.get(url, {hotelname:value}, function(data){
if (data === 'true') response = true;
});
alert((response) ? 'Hotel is Not Existing' : 'Hotel Exists');
return [response, "That hotel already exists"];
}