2016-09-21 107 views
0

我正在为我的投资组合建立一个电影库,目前我只有20个对象用于电影标题和摘要的JSON数组。做到这一点,当我点击物品时,可以说自杀队,并且比名字出现在网址中。 像这样,http://localhost:63342/Movie/title_of_the_movie如何从数组中的JSON对象获取属性值,然后写入url

很高兴在js或jquery中做到这一点。

[ 
{ 
"name": "Godzilla", 
"year": 1998, 
"releaseDate": "20 May 1988", 
"runtime": "2h 19mm", 
"director": "Roland Emmerich", 
"screenplay": "Dean Devlin and Roland Emmerich", 
"cast": { 
    "Matthew Broderick": "Dr.Niko Tatopolous", 
    "Jean Reno": "Philipe Roache", 
    "Maria Pitillo": "Audrey Timmonds", 
    "Hank Azaria": "Victor 'Animal' Palotti", 
    "Kevin Dunn": "Colonel Hicks", 
    "Michael Lerner": "Mayor Ebert", 
    "Harry Shearer": "Charles Caiman", 
    "Arabella field": "Lucy Palotti", 
    "Vicki Lewis": "Dr.Elsie Chapman", 
    "Doug Savant": "Sergeant O'Neal" 
}, 
"castPhoto": {}, 
"imdb": 5.3, 

"boxOffice": "$130,000,000 ", 
"openingWeekend": "$55,726,951" 
} 
] 
+0

你也应该在这里显示你的JSON数组。你应该提到更多的细节 –

+0

你应该通过encodeURIComponent()函数传递你的标题,然后将它添加到url中。 – nikhil

回答

1

请注意,通常当您更改URL时,浏览器将停止显示您当前的页面并将加载其他页面。有几种方法可以在不重新加载页面的情况下更改网址,我将在最后提及。

一般来说,如果你有你在一个叫做movies可变数据(如样品中),你要创建A标签的链接点击,在容器标签movielist,那么你可以做这样的事情:

movies.forEach(function(movie) { 
    var link = document.createElement('A'); 
    link.setAttribute('href', '#' + movie.name.replace(/\W+/g,'_')); 
    movielist.appendChildI(link); 
}); 

正如你所看到的,我们通过更换任何东西是不是一个“单词字符”(基本字母)用下划线消毒电影名称的网址。虽然这对URL有效,但它是一种有损转换 - 即无法取消原始值。什么@nikhil建议 - 使用encodeURIComponent()是一个无损的转换 - 即你可以读回来,并获得原始值,虽然它不是很漂亮的人眼(主要是标准的英文文本的问题是,它将空间转换为“+”或“%20”)。

此外,你可以看到我在前面加上了“#”的链接URL--这意味着我不会完全替换当前URL,只是它的“Fragment Identifier”部分。当您更改当前URL的片段标识符时,浏览器不会重新加载页面,而是尝试在页面上找到指定的“文档片段”并滚动到该页面。由于我们不希望在页面上找到具有电影名称的片段,因此它不会执行任何操作 - 只需在URL中显示它(尽管您可能想要使用片段切换和CSS做一些有趣的事情,即see here)。

在不重新加载页面的情况下更改URL的另一种方式是,但要正确处理更复杂的是History.pushState()。这对单页面应用程序很有用。 See here for details about pushState()。作为这种用法的一个例子,这是Github在浏览存储库中的文件时使用的,它可以在不重新加载整个页面的情况下快速加载它们,但仍然可以使用浏览器的“后退”和“前进”按钮进行导航。

+0

谢谢,它正在工作:D –