问候,
我已经使用了大约1或2个小时,似乎我找不到我在创建的这个函数中的错误,通过jQuery和Ajax检查数据库中某些东西的可用性。
我正在使用此链接调用该函数用于测试purpouse,因为我之前无法捕获任何错误。
<a href="#" onclick="availability_check("Despacho", "22/05/2011","12:30", "12:45")">TEST</a>
功能的代码如下:
function availability_check(location, date, from, to){
var check = 'location='+ location + '&date='+ date + '&from=' + from + '&to=' + to;
$.ajax({
type: "POST",
url: "check-availability.php",
data: check,
cache: false,
success: function(response){
var available = response;
}
});
return available;
}
在document_ready函数下声明。
比我聪明的人能告诉我什么是错的吗?萤火虫只是说:
3
语法错误 [在此错误中停止] availability_check(
答案 0 :(得分:2)
您在属性引号内使用引号内的引号,因此availability_check(
之后的第一个引号成为onclick
属性的结束引号。将其更改为:
<a href="#" onclick="availability_check('Despacho', '22/05/2011', '12:30', '12:45')">TEST</a>
或:
<a href="#" onclick="availability_check("Despacho", "22/05/2011", "12:30", "12:45")">TEST</a>
将JavaScript代码与HTML代码分离也是一种很好的做法,因此,不要将其放在onclick
属性中,而是创建data-*
属性更好,为元素赋予{{ 1}},然后使用单独的JavaScript文件获取元素并在其上附加onclick even处理程序。
答案 1 :(得分:2)
那里有三个问题。首先,您在onclick
属性中有引号。浏览器会认为您要结束属性,而不是启动JavaScript字符串。尝试使用'
代替"
。
第二个问题是你在闭包内声明available
。当您回到availability_check
时,available
将超出范围。将var available
移至$.ajax
上方并将当前var available = response;
更改为available = response;
。
第三个问题是你似乎不理解异步性。将在启动请求时调用$.ajax
,但请求不会立即完成。在请求完成之前,它将继续return available;
。然后,一旦完成,它将设置available
,但到那时为时已晚。要解决此问题,请将async: false
添加为$.ajax
的另一个选项。
答案 2 :(得分:0)
看起来您的报价导致解析失败。尝试:
<a href="#" onclick="availability_check('Despacho', '22/05/2011','12:30', '12:45')">TEST</a>
答案 3 :(得分:0)
问题在于onclick
属性:
onclick="availability_check("Despacho", "22/05/2011","12:30", "12:45")"
问题是Javascript摘录中的引号与分隔HTML属性的引号冲突。这是为什么最好不要使用内联onclick
属性的原因之一。
由于您使用的是jQuery,为什么不使用它的事件处理程序绑定功能。为您的链接指定id
属性并执行以下操作:
$('#yourId').click(function() {
availability_check("Despacho", "22/05/2011","12:30", "12:45");
});
如果您愿意,还有许多基于CSS选择器的其他选择器。为了掌握jQuery提供的内容,我建议http://jqfundamentals.com/
答案 4 :(得分:0)
在这里使用单引号:
<a href="#" onclick="availability_check('Despacho', '22/05/2011','12:30', '12:45')">TEST</a>
答案 5 :(得分:0)
请注意,响应返回时会触发成功。当你调用函数availability_check时,它将执行你的ajax请求并立即返回可用,在调用成功之前(除非你有一个非常快的服务器;)。您应该使用success function ....中的返回数据进行修改。