Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从HTTPObject传递变量_Javascript_Ajax - Fatal编程技术网

Javascript 如何从HTTPObject传递变量

Javascript 如何从HTTPObject传递变量,javascript,ajax,Javascript,Ajax,我对Javascript和一般的web编程非常陌生。我想我误解了一些基本的东西,但我一直无法弄清楚是什么 我有以下代码: function checkUserAuth(){ var userAuthHttpObject = new XMLHttpRequest(); var url = baseURL + "/userAuth"; userAuthHttpObject.open("POST",url,true); userAuthHttpObject.setRequestHeader("Cont

我对Javascript和一般的web编程非常陌生。我想我误解了一些基本的东西,但我一直无法弄清楚是什么

我有以下代码:

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中取出,并放入调用该函数的页面?

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

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

然后在有“返回响应”的地方放上“采取行动(响应)”


因此,现在,takeAction将执行调用“var authResponse=checkUserAuth();”之后您将执行的任何操作。

在继续编写您所要求的脚本之前,您应该从以下几个最佳实践开始

  • XmlHttPrequest()与浏览器不一致。我建议您使用mootools或优秀的jquery.ajax等库作为起点。它更容易实施,工作更一致

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

  • 真正的用户授权应该在服务器上完成,而不是在浏览器中。我不确定您是如何使用此脚本的,但我建议您可能需要重新考虑

  • 首先,这里有一种方法可以通过jquery从ajax调用中获取信息:

    $.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();
          });
      }
    });
    
    $.ajax({
    //获取一个html块
    url:'ajax/test.html',
    //对html块执行一些操作
    成功:函数(htmlData){
    //替换
    $('#auth').html(htmlData);
    //将#auth的内容仅替换为#message from中的数据
    //我们在ajax调用中收到的数据
    $('#auth').html(函数(){
    返回$(htmlData).find('#message').text();
    });
    }
    });