我已经定义了一个返回“yes”或“no”的文件availability.php,我有一个必须在订阅用户之前检查表单可用性的表单,并且我使用这个ajax函数执行此操作,但是比较线似乎不起作用?
availability: function(element, value) {
$.ajax({
type: "GET",
url: "/tunnel/availability.php",
data: "username="+element,
dataType: "html",
success: function(data){
$("#response").html(data);
var $response = data;
if ($response == "yes")
alert("found");
}
});
}
答案 0 :(得分:0)
试试这个:
availability: function(element, value) {
$.ajax({
type: "GET",
url: "/tunnel/availability.php",
data: "username="+element,
success: function(data){
if (data == "yes"){
alert("found");
}
}
});
}
答案 1 :(得分:0)
为什么你认为它不起作用?如果您希望函数在提交表单之前检查并返回值,则很可能在执行ajax检查之前返回availability
函数,允许您的表单提交并使警报无效 - 即,页面已经卸载并且正在处理新请求。如果您想在提交表单之前使用它来检查可用性,您需要:
availability
返回false(或以其他方式停止提交表单)availability
成功函数提交表单。您还可以简化检查 - 在检查变量之前无需将“数据”放入变量中。我也不确定你为什么要将它添加到页面中,但这可能是合理的。我还建议对函数进行名称更改(如果您修改它以执行此操作)并通过AJAX处理表单提交 - 如果没有,您可以删除处理程序并只是在表单上触发提交。
submitIfAvailable: function(form, element, value) {
$.ajax({
type: "GET",
url: "/tunnel/availability.php",
data: "username="+element,
dataType: 'text', // I think it should work without this, but...
success: function(data){
if (data == "yes"){
$form = $(form);
$.post( $form.attr('action'), $form.serialize(), function(result) {
// process the result of form submission
});
}
}
});
return false;
}
我正在做一些假设 - 如果不符合availability
函数的使用方式,则适当修改。要记住的关键是该函数将在之前返回 AJAX调用,并且您不能使用来自AJAX调用的函数的任何返回值。至少,如果您不通过将aSync
选项设置为false
来强制AJAX调用同步运行,则确实如此。
答案 2 :(得分:0)
您需要确认实际返回的可用性页面。
使用Firebug(或您喜欢的JS调试器)调试回调,以查看返回的data
对象类型。您可能会发现您的返回值已被包装,例如,您可能需要检查data.value
或类似的内容。