【问题标题】:Handling JSON response with Javascript使用 Javascript 处理 JSON 响应
【发布时间】:2013-04-23 13:21:54
【问题描述】:

与我相关的问题有很多,但是在我花了几个小时仔细研究不同的答案并自己尝试之后,我仍然无法解决我的问题!

我正在使用 OAuth 2.0 协议来访问 Box 的 API。到目前为止,我已经能够检索到授权码,现在我正试图用它来换取访问码。到目前为止,一切似乎都运行良好:在我向 Box 发出 POST 请求后,我被重定向到 https://www.box.com/api/oauth2/token 并收到一个我不知道如何处理的 JSON 响应。

我尝试过使用 JQuery 的 $.get 和 $.parseJSON 函数,但我完全不知道我应该如何构建代码,或者我是否一开始就以正确的方式处理这个问题。

这是我用来 POST 的函数:

function post_to_url(path, params) {

    var form = document.createElement("form");
    form.setAttribute("method", "post");
    form.setAttribute("action", 'https://www.box.com/api/oauth2/token');

    for(var key in params) {
        if(params.hasOwnProperty(key)) {
            var hiddenField = document.createElement("input");
            hiddenField.setAttribute("type", "text");
            hiddenField.setAttribute("name", key);
            hiddenField.setAttribute("value", params[key]);

            form.appendChild(hiddenField);
         }
    }

    document.body.appendChild(form);
    form.submit();
}

当我调用它时,我被重定向到https://www.box.com/api/oauth2/token,我的浏览器显示以下字符串:

{"access_token":"H97GnkuWCRUxxx"expires_in":3600,"refresh_token":"cIJyyyyym1aSuNFmmC2PgTtiP2xfXm0dCmzzzz,"token_type":"bearer"}

非常感谢我能得到的任何帮助,非常感谢!

【问题讨论】:

  • jsonp 可能?是在函数内部吗?你也可以访问为 var object = json_response; object["access_token"] 或 object.access_token。如果它是 JSONP,则 jquery 中有一个特定的函数......

标签: javascript html post oauth-2.0 box-api


【解决方案1】:

你不需要jquery来做这个,其实很简单。

var json = JSON.parse(the returned json var);

那么你可以这样处理:

json.access_token; //this would be the access token

这是我用于 POST/GET 请求的代码:

    var xhr=new XMLHttpRequest();
    xhr.open('POST','url', true);//the true bool makes it async
    xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded"); //this url encodes the request (this is for if you have special values such as spaces and symbols)
    xhr.send(information to send goes here);
    xhr.onreadystatechange=function()
    {
        if(xhr.readyState===4)
        {
            if(xhr.status===200)
            {
                var json = xhr.responseText;
            }
        }
    };

【讨论】:

  • 感谢您的回答。我的问题是我不知道如何收集 json var。当我发出 POST 请求时,我被重定向到如下所示的网站:i.imgur.com/W9Q1roF.png。此时,我在 POST 请求之后编写的任何代码都不会被触发。我猜必须有一种方法可以将 POST 请求封装在一个变量中以存储 JSON 对象,但我不确定如何。再次感谢您的帮助!
  • @user2066880 我添加了一个示例发布请求
  • @user2066880 你这样做的方式会将你带到另一个页面,我这样做的方式是通过 ajax 请求。
  • 我已经尝试过类似的解决方案,但我收到了一个跨域错误“XMLHttpRequest cannot load box.com/api/oauth2/token. Origin localhost is not allowed by Access-Control-Allow- Origin”我无法解决它,这就是为什么我一直在使用这种迂回的方式来发出 POST 请求。再次感谢您的帮助
  • 我得去上课一会儿,但我一回来就会加你,如果你能在方便的时候帮助我,那就太好了。非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多