这可能不是一个AngularJS问题,可能只是一个AJAX问题。我是前沿的“开发者”方面的新手,所以请耐心等待。
在进行AJAX调用以获取JSON数据时,返回和查看的数据背后的逻辑在哪里?在我看来,会有几种可能性,我想了解哪种是正确的选择以及为什么。
让我们使用搜索和播放Youtube视频的示例。
逻辑可能落到后端(控制器),其中JSON基于某些逻辑呈现,为您提供具有完全正确数据的JSON文件。即,您搜索“猫视频”,并且在进行AJAX调用时,您提取的JSON文件已被渲染为仅限猫视频。
另一端是Angular控制器具有逻辑。这意味着所有数据都被调用(猫视频以及其他所有内容......音乐视频,有趣的视频,教程等),然后在客户端进行排序。无论如何,这对我来说对客户来说效率更低/更慢,所以似乎没有意义。我想仍然可能会对客户端的数据进行一些过滤。因此,搜索“猫视频”可能不会返回所有视频,但绝对所有猫视频和任何基于视图,视频长度等的过滤都将在客户端完成(对比再次调用数据库以获取“新”视频集。)
不确定这是否准确,但您的工厂中是否有逻辑只返回部分数据?但是,我相信整个JSON文件需要呈现,但只返回部分。我想根据JSON文件呈现的位置(即后端或前端),这可能类似于选项#1或#2。
或许我完全误解了事情,而且这种方式完全不同!
我基本上想弄清楚1.用户搜索术语和结果的场景如何显示,2。用户点击搜索结果,现在结果的更详细数据在其自己的页面上。以及如何最终解决问题。我正在寻找AngularJS的帮助,但我认为这最终是一个AJAX问题(单页应用程序与否)。
答案 0 :(得分:4)
您可能会对一些关键概念感到困惑。
首先。 JSON不是文件,它是一种格式,更简单地说,是一种字符串。这对于折叠数组和存储地址 - 值对非常有用,因此很多数据都以这种格式传播。严格来说,它们是JSON对象,但它们很像字符串和数组。如果我没记错的话,它看起来像这样:
{ "name" : "john doe", "pet" : "dog", "hobby" : "parasailing" }
其次,AJAX是对服务器的请求,是在原始页面加载后从客户端(浏览器)发出的。也就是说,您输入'youtube.com'并且youtube服务器接收请求并将大量HTML发送回您的浏览器。
您观看视频,进行评分,浏览器不会重新加载页面,而是将单独的请求发送回具有您评级的youtube服务器。请求中有一个参数说“将其发送到ratingspage.php”。这个请求是AJAX。
现在,逻辑发生了(服务器端)。 ratingspage.php
收到您的请求。它会联系数据库,更新或失败等等,并向您的浏览器发回响应。此响应可能采用JSON格式。
最后,您的浏览器会根据需要解析该响应并更新DOM(HTML文档)。
此时,值得注意的是,如果逻辑发生在客户端(浏览器),用户可以看到它 - 这是一个安全问题!因此,敏感操作应该在服务器端执行,您可以在其中测试和清理请求数据。
总结:
这是一个带有注释的简单ajax请求(在Javascript中完成)。这没有异常处理,状态检查,或任何其他不使用它!但它给了你基本的想法。
// Make a new request
var req = new XMLHttpRequest(); }
// Requests will have various states depending on whether they're processing,
// finished, error, etc. We'll assume everything went OK.
// We need to establish a handler before the request
// is sent so it knows what to do.
req.onreadystatechange = function() {
// Here's what the server sent back to the browser
alert(req.responseText);
}
// Using the GET method, set up some parameters
req.open("GET", "somelogicpage.php?blah=blee&bloo=bar", true);
// Send the request
req.send(null);
服务器端,somelogicpage.php
可能如下所示:
<?php
if ($_GET['blah'] != 'blee']) {
// This is the response text!
echo "Sorry, you need to blee when you blah.";
}
else {
// (or this)
echo "I'm ecstatic to report nothing is wrong!";
}
?>
您之前Javascript中处理函数的alert(req.responseText)
会说出PHP已经转出的内容。
所以是的,您可以使用您喜欢的任何部分,并返回您喜欢的任何内容。 Javascript发出嘘声。