这似乎是一个简单的问题,但我有一个编码器的心理障碍:
概念:
我输入了一个网址,即 - 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 ......什么?
非常感谢你们!
答案 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¶2=value2
获取json对象。