如何从ajax成功回调函数中读取javascript变量
我在做什么如何从ajax成功回调函数中读取javascript变量,javascript,jquery,Javascript,Jquery,我在做什么 $.ajax({ type: "GET", url: url, //valid url..The ajax part works fine dataType: 'html', success: function(response) { if (loginStatus !== 'false') { testFunction(response); //assuming there is a function cal
$.ajax({
type: "GET",
url: url, //valid url..The ajax part works fine
dataType: 'html',
success: function(response) {
if (loginStatus !== 'false') {
testFunction(response); //assuming there is a function called testFunction
}
}
});
响应是html的混合内容,它还包含
<script>var loginStatus = 'false'</script>
var loginStatus='false'
如果(loginStatus!=“false”)在成功模式下不起作用。我做错了什么
反应是这样的
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
</head>
<body>
This is a test page
<script>var loginStatus = 'false'</script>
</body>
</html>
文件标题
这是一个测试页面
var loginStatus='false'
我认为您无法访问ajax返回中的变量,因为它的javascript没有被解释
这不是一个好主意(您可能会遇到其他问题),但您可以将返回放在某个隐藏的iframe中,并使用以下方法访问其中的变量:
document.getElementById("iframeId").contentWindow.loginStatus
如果您可以控制检索ajax结果的页面,我建议您只响应变量内容或json,以便在javascript中轻松操作
$.ajax({
type: "GET",
url: 'loginCheck.php', //valid url..The ajax part works fine
dataType: 'html',
success: function(response) {
if (response == "YES") {
testFunction(response); //assuming there is a function called testFunction
}
}
});
loginCheck.php
//检查用户名和密码
如果它与数据库中的用户名和密码匹配。
然后回显“是”,否则回显“否”
我用PHP脚本语言解释了这个登录概念。解决方案并不完美。如果响应是JSON,这将容易得多。提供潜在解决方案的提示 您必须解析返回的HTML。糟糕的是Javascript部分必须是
eval
d(糟糕的做法!),除非您执行一些正则表达式魔术来获取变量的值
更新(不要这样做):
再次声明,这是不好的做法,但这是可能的。以下只是应用于代码的概念证明。还有一个与基本思想相一致的例子。基本上,您可以使用JQuery的.parseHTML
方法解析响应,并使用.globalEval
对脚本求值,此时变量就可以检查了
$.ajax({
键入:“获取”,
url:url,//有效url..ajax部分工作正常
数据类型:“html”,
成功:功能(响应){
var scriptContent=$($.parseHTML(响应,文档,true)).filter('script').text();
$.globalEval(脚本内容);
//此时,应定义变量loginStatus
if(loginStatus!==“false”){
testFunction(response);//假设有一个名为testFunction的函数
}
}
});
另一个参考:分享来自ajax@guradio--刚才做了目标url实际包含什么?
loginStatus!='false'
它的意思是false!==假`?它永远不会满足你的愿望condition@DavidJawphan--该布尔值是动态设置的。是的,我们的想法是评估这个变量。如果是假的,不要叫那个方法。是的,我希望我能。我同意这是一个更好的解决方案。我用我认为可行的例子更新了答案。如果有帮助的话,请告诉我。我最终听到了您关于不依赖eval的第一个建议,并将该布尔值解析为类似于false的html…然后就可以很容易地执行$(response).find('.loginStatus').html()…这很有效