2011-03-14 45 views
4

一个URL这似乎是一个简单的问题,获取的JSON对象,但我有一个编码者的心理障碍:通过调用参数

概念:

我键入一个URL,即 - www.mysite。 COM/getStuff?名称=杰里&职业=工程师&编号= 12345

,而不是取回一个网页或东西,我想找回一个JSON对象,这样我可以在不同的页面解析和。

美中不足的是:

我当然可以通过调用一个MVC控制器,这些参数和返回JSON对象做到这一点。然而,假设我需要在一个js文件中创建这个json对象,该文件从URL中获取这些参数的值,并将结果返回给我的json。

的问题

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

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

非常感谢你们!

+0

只要你可以返回一个JSON OBJET,你可以打电话给你想要的文件。 Javascript的唯一问题是从URL中获取值。你需要编写一个GET函数来获取它们在PHP只需要$ _GET的地方。 –

+0

很难理解你想要达到的目标。 –

+0

@LekisS,谢谢我明白你在说什么。 @TheSuperTramp,很难理解你不明白的东西,因为你没有解释什么是没有道理的,为什么......因为可读性强,我试图达到的目标和标题。也许“如何”和“为什么”不清楚,但我需要的不仅仅是“我不明白”来帮助你。 – EKet

回答

2

使用jQuery通过创建JSON对象之前插入到<script>这个标签来解析URL。从link从LekisS

$.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对象创建之前也要包含这个脚本。

一旦你有合适的剧本和变量,您可以创建使用需要通过调用它们作为使用jQuery的例子底部显示这些参数JSON对象。您还可以从Json2.js脚本文件中查找想要的JSON转换(即字符串或对象)。

现在我们有一大堆的脚本里面的一切,但我们在哪里,通过URL调用get JSON对象?

因此,答案很简单:

这些脚本,其中最后一个脚本终于创建并返回JSON创建一个简单的HTML页面。上传到服务器,并使用像

www.mysite.com/getStuff?para1=value&para2=value2 URL参数,以获得JSON对象。

2

你有几个选项

1)生成JSON在JavaScript

要做到这一点,你需要创建一个简单的页面,其中包括一个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 style(so/getStuff/jerry/engineer/12345,在你的情况下)提供它们。其他人使用更传统的/ function /?argName = argVal ...方法。一旦有了参数,将它们以JSON格式(http://php.net/manual/en/book.json.php)写入页面是件小事。

决定,决定

就个人而言,我会使用MVC方法,因为它需要最少四处奔波得到你想要的JSON。但是,除非您熟悉MVC框架(例如蛋糕),否则您可能会发现启动和运行的过程有点繁琐 - 这些框架旨在用于提供页面内容并让它们提供服务JSON并非总是明确记录。

+0

非常感谢有组织的解释,我们很少有这个了。我必须说,我更喜欢jquery解析器的url参数,正如LekisS的评论中提到的那样,我使用了它。这是一个更清洁。但是你的脚本和url解析方法非常棒。我个人更喜欢使用MVC,因为一切都在客户端完成,我根本不需要去服务器,它不是重要的数据。但LekisS事先评论了这种方法,等待看他是否公开回答。非常感谢。 – EKet