通过调用带参数的URL来获取json对象

时间:2011-03-14 05:55:34

标签: javascript jquery json model-view-controller

这似乎是一个简单的问题,但我有一个编码器的心理障碍:

概念:

我输入了一个网址,即 - www.mysite.com/getStuff?name=Jerry&occupation=Engineer&Id=12345

而不是回到一个网页或我想要取回一个json对象的东西,以便我可以在另一个页面上解析。

捕获:

我当然可以通过使用这些参数调用MVC控制器并返回一个json对象来实现此目的。但是,假设我需要在一个js文件中创建这个json对象,该文件从URL获取这些参数的值,然后我将json作为结果返回。

问题

我可以将参数传递给js文件并返回json对象吗?要么 我可以从控制器调用js文件并将这些参数传递给并检索json对象吗? 我是否需要通过URL调用控制器,或者我可以只调用一个js文件从URL中获取参数然后返回json?

处理这种情况的正确/最佳方式是什么,使用MVC,js,jquery ......什么?

非常感谢你们!

2 个答案:

答案 0 :(得分:2)

你有几个选择

1)在javascript中生成json

为此,您需要创建一个包含javascript JSON编码器的简单页面(例如https://github.com/douglascrockford/JSON-js)。这将托管在“/getStuff/index.html”,并通过输入“www.mysite.com/getStuff/?arg=val ...”来调用。例如:

<html>
    <head>
        <script src="json.js" type="text/javascript"></script>
        <script type="text/javascript">
                    //this function will take the window.location.search string of ?name=val and
                    //create an object like {'name':'val'}
            var parseUrl = function(urlParams) {
                var retObj = {};
                var urlParameters = null;

                if (!urlParams || urlParams.length == 0) {return retObj}
                if (urlParams.charAt(0) == '?') {
                    urlParameters = urlParams.substring(1);
                }else {
                    urlParameters = urlParams;
                }
                if (urlParameters.length == 0) {return retObj}
                var parameterPairs = urlParameters.split('&');
                var x;
                for (x in parameterPairs) {
                    var parameterPair = parameterPairs[x];
                    parameterPair = parameterPair.split('=');
                    retObj[parameterPair[0]] = parameterPair[1];
                }
                return retObj;
            };
            var createJson = function(){
                var params = parseUrl(window.location.search);
                //do work here
                var retObj = {}; //suppose this is the result of the work
                document.print(JSON.stringify(retObj)); //use the included JSON encoder
            };
        </script>
    </head>
    <body onload="createJson();">
    </body>
</html>

2)使用MVC框架

存在的每个MVC框架都允许您访问页面请求中使用的搜索参数。有些将要求您以/ function / arg1 / arg2样式提供它们(所以/ getStuff / jerry / engineer / 12345,在您的情况下)。其他人使用更传统的/ function /?argName = argVal ...方法。获得参数后,将它们以JSON格式(http://php.net/manual/en/book.json.php)写入页面是一件小事。

决定,决定

就个人而言,我会使用MVC方法,因为它需要最少的运行来获得你想要的JSON。但是,除非您熟悉MVC框架(例如蛋糕),否则您可能会发现启动和运行的过程有点艰难 - 这些框架是为服务页面内容而设计的,并且让它们提供服务JSON并不总是如此清楚记录。

答案 1 :(得分:2)

使用jquery通过在创建json对象之前将其插入<script>标记来解析URL。来自LekisS的link

$.extend({
  getUrlVars: function(){
    var vars = [], hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    for(var i = 0; i < hashes.length; i++)
    {
      hash = hashes[i].split('=');
      vars.push(hash[0]);
      vars[hash[0]] = hash[1];
    }
    return vars;
  },
  getUrlVar: function(name){
    return $.getUrlVars()[name];
  }
});

// Get object of URL parameters
var allVars = $.getUrlVars();

// Getting URL var by its nam
var byName = $.getUrlVar('name');

在单独的脚本标记中创建json对象。您需要包含Json2.js插件才能将对象转换为JSON。因此,在创建JSON对象之前也要包含此脚本。

一旦有了适当的脚本和变量,就可以根据需要使用这些参数创建一个json对象,方法是使用jquery调用它们,如示例底部所示。您还可以从Json2.js脚本文件中查找所需的JSON转换(即字符串或对象)。

现在我们拥有一堆脚本中的所有内容但是我们在哪里通过URL调用获取json对象?

所以答案很简单:

使用这些脚本创建一个简单的html页面,最后一个脚本最终创建并返回json。上传到服务器并使用

等URL参数

www.mysite.com/getStuff?para1=value&para2=value2获取json对象。