我是非常非常新的Javascript,以及一般的网络编程。我认为我误解了一些基本的东西,但我一直无法弄清楚是什么。
我有以下代码:
function checkUserAuth(){
var userAuthHttpObject = new XMLHttpRequest();
var url = baseURL + "/userAuth";
userAuthHttpObject.open("POST",url,true);
userAuthHttpObject.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
userAuthHttpObject.onload=function(){
if (userAuthHttpObject.readyState == 4) {
var response = json.loads(userAuthHttpObject.responseText);
return response; //This is the part that doesn't work!
}
};
userAuthHttpObject.send(params);
}
我很乐意在我的网页上用以下内容来表达:
var authResponse = checkUserAuth();
然后用这些数据做我想做的事。
然而,返回一个变量只是将它返回给userAuthObject,而不是一直返回到最初调用的函数。
有没有办法从HttpObject中获取数据,并进入调用函数的页面?
答案 0 :(得分:1)
使用AJAX需要围绕异步行为,这与其他类型的编程不同。您需要设置回调函数,而不是直接返回值。
创建另一个JavaScript函数,该函数接受AJAX响应作为参数。这个函数,我们称之为“takeAction(响应)”,应该做任何需要的事情,可能会打印失败消息或在隐藏字段中设置值并提交表单,无论如何。
然后你有“返回响应”放“takeAction(响应)”。
所以现在,takeAction会做你在调用“var authResponse = checkUserAuth();”之后所做的一切。
答案 1 :(得分:1)
在继续编写您询问的脚本
之前,您应该先了解一些最佳实践XMLHTTTPRequest()与浏览器不一致。我建议你使用mootools这样的库或优秀的jquery.ajax作为起点。它更容易实现,并且更加一致。 http://api.jquery.com/jQuery.ajax/
内容类型很重要。如果您使用表单内容类型,则在尝试解析json数据时会遇到问题。如果你想使用json,请使用“application / json”。
真正的用户授权应该在服务器上进行,而不是在浏览器中进行。我不确定你是如何使用这个脚本的,但我建议你可以重新考虑一下。
开头的预备,这是我从ajax调用到jquery页面获取信息的一种方式:
$.ajax({
//get an html chunk
url: 'ajax/test.html',
// do something with the html chunk
success: function(htmlData) {
//replace the content of <div id="auth">
$('#auth').html(htmlData);
//replace content of #auth with only the data in #message from
//the data we recieved in our ajax call
$('#auth').html( function() {
return $(htmlData).find('#message').text();
});
}
});