如何从HTTPObject传递变量

时间:2011-10-10 04:44:07

标签: javascript ajax

我是非常非常新的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中获取数据,并进入调用函数的页面?

2 个答案:

答案 0 :(得分:1)

使用AJAX需要围绕异步行为,这与其他类型的编程不同。您需要设置回调函数,而不是直接返回值。

创建另一个JavaScript函数,该函数接受AJAX响应作为参数。这个函数,我们称之为“takeAction(响应)”,应该做任何需要的事情,可能会打印失败消息或在隐藏字段中设置值并提交表单,无论如何。

然后你有“返回响应”放“takeAction(响应)”。

所以现在,takeAction会做你在调用“var authResponse = checkUserAuth();”之后所做的一切。

答案 1 :(得分:1)

在继续编写您询问的脚本

之前,您应该先了解一些最佳实践
  1. XMLHTTTPRequest()与浏览器不一致。我建议你使用mootools这样的库或优秀的jquery.ajax作为起点。它更容易实现,并且更加一致。 http://api.jquery.com/jQuery.ajax/

  2. 内容类型很重要。如果您使用表单内容类型,则在尝试解析json数据时会遇到问题。如果你想使用json,请使用“application / json”。

  3. 真正的用户授权应该在服务器上进行,而不是在浏览器中进行。我不确定你是如何使用这个脚本的,但我建议你可以重新考虑一下。

  4. 开头的预备,这是我从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();
          });
      }
    });