我有一个表单,当提交运行我的“checkemail”函数来变量电子邮件地址可以在数据库中找到。如果找到,则responseText ==“true”,否则为“false”。这样工作正常,使用Firebug可以看到正常....但响应文本应该分配的实际变量是不断显示“”,因此导致函数一直返回false。
function checkemail(){
var EmailFromForm = $("#lostemail").val();
var EmailCheckRes = $.ajax({
type : "POST",
cache : false,
url : "./scripts/passreset/emailcheck.php",
data : "Email="+EmailFromForm,
dataType : "text",
}).responseText;
if (EmailCheckRes == "true")
{
alert("Should say true: " + EmailCheckRes);
return true;
}
else
{
$("#ErrorMsg").html("Your email address is either invalid or not found.");
alert("Should say false: " + EmailCheckRes);
return false;
}
}
如果有人对我做错了什么有任何指示,我们将不胜感激。
答案 0 :(得分:3)
问题是$ .ajax方法正在执行异步,所以checkemail函数在 之前返回 你的ajax请求。
您的应用程序流程不是线性的,因此checkmail的返回值不会反映您的ajax请求返回的响应。
您需要重新构建代码以进行回调并在ajax请求完成后执行它。
答案 1 :(得分:1)
您的ajax网址必须是emailcheck.php
的网址,而不是使用./
的相对系统路径
var EmailCheckRes = $.ajax({
type : "POST",
cache : false,
async : false,
url : "scripts/passreset/emailcheck.php",
data : "Email="+EmailFromForm,
dataType : "text",
}).responseText;
编辑:虽然它不是切换到同步服务器请求的最佳解决方案,但您可以设置ajax选项async: false
,这将使浏览器等待响应继续,这应该消除你的问题。此外,我建议切换到绝对路径,和/或从相对路径的前面删除./
。我在示例代码中添加了此选项。
答案 2 :(得分:1)
您需要重新构建代码。大多数AJAX调用都是异步的,这意味着代码的流程无需等待调用完成。
有意义的是,你需要改变:
function checkmail() {
var checkThis = Ajax();
if (checkThis) {
DoSomething();
}
else {
DontDoSomething();
}
}
有:
function checkmail() {
Ajax.success = function(checkThis){
if (checkThis) {
DoSomething();
}
else {
DontDoSomething();
}
};
Ajax.error= function(){
ReportSomeError();
};
Ajax();
}
应用于您的代码,它可能是这样的:
function checkemail () {
var EmailFromForm = $("#lostemail").val(),
$.ajax({
type:"POST",
cache:false,
url:"./scripts/passreset/emailcheck.php",
data:"Email="+EmailFromForm,
dataType:"text",
success:function(EmailCheckRes){
if (EmailCheckRes == "true") {
alert("Should say true: " + EmailCheckRes);
/* You cannot longer "return" this value, add code to do
* what you need done
*/
return true;
}
else {
$("#ErrorMsg").html("Your email address is either invalid or not found.");
alert("Should say false: " + EmailCheckRes);
/* You cannot longer "return" this value, add code to do
* what you need done
*/
return false;
}
},
error:function(){
$("#ErrorMsg").html("There was an AJAX communication error.");
}
});
}
答案 3 :(得分:0)
我真的很难在事件的“document.ready”阶段将jQuery ajax的结果存入我的变量。
当用户在页面加载后触发选择框的“onchange”事件时,jQuery的ajax会加载到我的变量中,但是当页面首次加载时,数据不会提供变量。
我尝试了很多很多不同的方法,但最后,我需要的答案是在这个stackoverflow页面上:JQuery - Storing ajax response into global variable
感谢撰稿人Charles Guilbert,我能够将数据输入到我的变量中,即使我的页面首次加载也是如此。
以下是工作脚本的示例:
jQuery.extend
(
{
getValues: function(url)
{
var result = null;
$.ajax(
{
url: url,
type: 'get',
dataType: 'html',
async: false,
cache: false,
success: function(data)
{
result = data;
}
}
);
return result;
}
}
);
// Option List 1, when "Cats" is selected elsewhere
optList1_Cats += $.getValues("/MyData.aspx?iListNum=1&sVal=cats");
// Option List 1, when "Dogs" is selected elsewhere
optList1_Dogs += $.getValues("/MyData.aspx?iListNum=1&sVal=dogs");
// Option List 2, when "Cats" is selected elsewhere
optList2_Cats += $.getValues("/MyData.aspx?iListNum=2&sVal=cats");
// Option List 2, when "Dogs" is selected elsewhere
optList2_Dogs += $.getValues("/MyData.aspx?iListNum=2&sVal=dogs");