将jQuery ajax响应文本分配给变量constanty将返回null
希望你们中的一位在这个伟大的网站上能够提供帮助。我在为jQuery ajax调用响应文本分配变量时遇到问题 我有一个表格,提交时会运行我的“checkemail”功能来更改数据库中的电子邮件地址。如果找到,则responseText==“true”,否则为“false”。这很好,可以通过Firebug看到……但是响应文本应该分配给的实际变量始终显示“”,因此导致函数始终返回false将jQuery ajax响应文本分配给变量constanty将返回null,jquery,ajax,variables,responsetext,Jquery,Ajax,Variables,Responsetext,希望你们中的一位在这个伟大的网站上能够提供帮助。我在为jQuery ajax调用响应文本分配变量时遇到问题 我有一个表格,提交时会运行我的“checkemail”功能来更改数据库中的电子邮件地址。如果找到,则responseText==“true”,否则为“false”。这很好,可以通过Firebug看到……但是响应文本应该分配给的实际变量始终显示“”,因此导致函数始终返回false function checkemail(){ var EmailFro
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;
}
}
如果有人能指出我做错了什么,我们将不胜感激。您的ajax url必须是
emailcheck.php的web url
而不是使用/
的相对系统路径
var EmailCheckRes = $.ajax({
type : "POST",
cache : false,
async : false,
url : "scripts/passreset/emailcheck.php",
data : "Email="+EmailFromForm,
dataType : "text",
}).responseText;
编辑:虽然切换到同步服务器请求不是最佳解决方案,但您可以只设置ajax选项
async:false
,这将使浏览器等待响应继续,从而消除您的问题。另外,我建议切换到绝对路径,和/或从相对路径前面删除/
。我已将此选项添加到示例代码中。您的ajax url需要是emailcheck.php的web url
而不是使用/
的相对系统路径
var EmailCheckRes = $.ajax({
type : "POST",
cache : false,
async : false,
url : "scripts/passreset/emailcheck.php",
data : "Email="+EmailFromForm,
dataType : "text",
}).responseText;
编辑:虽然切换到同步服务器请求不是最佳解决方案,但您可以只设置ajax选项
async:false
,这将使浏览器等待响应继续,从而消除您的问题。另外,我建议切换到绝对路径,和/或从相对路径前面删除/
。我已将此选项添加到示例代码中。问题在于,$.ajax方法是异步执行的,因此checkemail函数在您的ajax请求完成之前返回
应用程序的流程不是线性的,因此checkmail的返回值不会反映ajax请求返回的响应
您需要重新构造代码,以便在ajax请求完成时接受回调并执行它。问题在于,$.ajax方法是异步执行的,因此checkemail函数在ajax请求完成之前返回 应用程序的流程不是线性的,因此checkmail的返回值不会反映ajax请求返回的响应
您需要重新构造代码以接受回调,并在ajax请求完成时执行回调。您需要重新构造代码。大多数AJAX调用都是异步的,这意味着代码流无需等待调用完成 有意义的是,你需要改变:
function checkmail() {
var checkThis = Ajax();
if (checkThis) {
DoSomething();
}
else {
DontDoSomething();
}
}
用于:
应用于您的代码时,可能会出现如下情况:
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.");
}
});
}
您需要重新构造代码。大多数AJAX调用都是异步的,这意味着代码流无需等待调用完成 有意义的是,你需要改变:
function checkmail() {
var checkThis = Ajax();
if (checkThis) {
DoSomething();
}
else {
DontDoSomething();
}
}
用于:
应用于您的代码时,可能会出现如下情况:
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.");
}
});
}
在事件的“document.ready”阶段,我很难将jQueryAjax的结果放入变量中 当用户在页面已经加载后触发选择框的“onchange”事件时,jQuery的ajax会加载到我的变量中,但是当页面第一次加载时,数据不会提供变量 我尝试了很多很多不同的方法,但最终,我需要的答案是在这个stackoverflow页面: 感谢贡献者Charles Guillbert,我能够将数据输入到变量中,即使在我的页面首次加载时也是如此 下面是工作脚本的一个示例:
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");
在事件的“document.ready”阶段,我很难将jQueryAjax的结果放入变量中 当用户在页面已经加载后触发选择框的“onchange”事件时,jQuery的ajax会加载到我的变量中,但是当页面第一次加载时,数据不会提供变量 我尝试了很多很多不同的方法,但最终,我需要的答案是在这个stackoverflow页面: 感谢贡献者Charles Guillbert,我能够将数据输入到变量中,即使在我的页面首次加载时也是如此 下面是工作脚本的一个示例:
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");
嗨,谢谢你的回复。我已经重新构造了一些东西,但是在success函数中执行return true/false似乎会导致一些范围问题,因为它只从ajax函数返回true/false,而不是从整体checkemail函数返回true/false。此时checkemail()始终返回true,表单正在提交。顺便说一句,我不认为将URL从相对更改为绝对会有任何区别。@Dan Twing我已经调整了我的答案,以采用不同的方法,因为您不希望为了利用
success
callback的优势而重新构造代码谢谢!设置为同步效果很好。我在这里学到了一些东西。嗨,谢谢你的回复。我已经重新构造了一些东西,但是在success函数中执行return true/false似乎会导致一些范围问题,因为它只从ajax函数返回true/false,而不是从整体checkemail函数返回true/false。此时checkemail()始终返回true,表单正在提交。顺便说一句,我不认为将URL从相对更改为绝对会有任何区别。@Dan Twing我已经调整了我的答案,以采用不同的方法,因为您不希望为了利用success
callback的优势而重新构造代码谢谢!设置为同步效果很好。我在这里学到了一些东西。谢谢Derek,虽然我了解如何使用success调用,但我仍然不确定如何从ajax函数中实际返回一些可以使用的东西