1

这甚至可能不是 AngularJS 问题,而可能只是 AJAX 问题。我是前端“开发人员”方面的新手,所以请耐心等待。

在进行 AJAX 调用以获取 JSON 数据时,返回和查看哪些数据背后的逻辑在哪里?在我看来,会有几种可能性,我想了解哪个是正确的选择以及为什么。

让我们以搜索和播放 Youtube 视频为例。

  1. 逻辑可能落到后端(控制器),在该处基于某些逻辑呈现 JSON,为您提供具有完全正确数据的 JSON 文件。即您搜索“猫视频”并且在进行 AJAX 调用时,您提取的 JSON 文件已被呈现为仅猫视频。

  2. 另一端是 Angular 控制器具有逻辑。这意味着调用所有数据(猫视频以及其他所有内容......音乐视频、有趣的视频、教程等),然后在客户端进行排序。无论如何,对我来说,这对客户来说效率更低/速度更慢,所以似乎没有意义。我想仍然可能会在客户端对数据进行一些过滤。因此,也许搜索“猫视频”不会返回所有视频,但绝对所有猫视频和任何基于观看次数、视频长度等的过滤都将在客户端完成(对比再次调用数据库以获得一组“新”视频)。

  3. 不确定这是否准确,但您的工厂是否有逻辑只返回部分数据?但是,我相信需要渲染整个 JSON 文件,但只会返回部分。我猜这取决于 JSON 文件呈现的位置(即后端或前端),这可能类似于选项 #1 或 #2。

或者,也许我完全误解了事情,它的工作方式完全不同!

我基本上是想弄清楚1.用户搜索一个词并显示结果的场景,2.用户点击一个搜索结果,现在更详细的结果数据在它自己的页面上。以及这最终是如何解决的。我正在寻求有关 AngularJS 的帮助,但我认为这最终是一个 AJAX 问题(单页应用程序与否)比什么都重要。

4

1 回答 1

4

您可能会对一些关键概念感到困惑。

第一的。JSON 不是文件,它是一种格式,更简单地说,是一种字符串。它非常适合折叠数组和存储地址-值对,所以很多数据都以这种格式飞来飞去。严格来说,它们是 JSON 对象,但它们很像字符串和数组。如果我没记错的话,它看起来像这样:

{ "name" : "john doe", "pet" : "dog", "hobby" : "parasailing" }

其次,AJAX 是对服务器的请求,在原始页面加载后从客户端(浏览器)发出。也就是说,您输入“youtube.com”,然后 youtube 服务器接收请求并将一大堆 HTML 发送回您的浏览器。

您观看视频,进行评分,然后浏览器不会重新加载页面,而是将单独的请求发送回 youtube 服务器,并附上您的评分。请求中有一个参数显示“将其发送到 ratingpage.php”。这个请求是 AJAX。


现在,逻辑发生了(服务器端)。 ratingspage.php收到您的请求。它会联系数据库、更新或失败或其他任何事情,然后将响应发送回您的浏览器。此响应可能是 JSON 格式。

最后,您的浏览器会解析该响应并根据需要更新 DOM(HTML 文档)。

此时,值得注意的是,如果逻辑发生在客户端(浏览器)上,用户可以看到它——这是一个安全问题!因此,应该在服务器端执行敏感操作,您可以在其中测试和清理请求数据。


总之:

  • AJAX 与初始加载事件是分开的。
  • 发送的信息是从客户端浏览器收集的
  • 逻辑发生在服务器端
  • 逻辑可以使用服务器可以理解的任何语言(PHP、Java、Ruby 等)
  • 信息返回给浏览器
  • 发送和接收的信息可能使用 JSON 格式
  • 客户端的一切都发生在 Javascript 中

这是一个带有注释的简单 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!";
}
?>

alert(req.responseText)从前面的 Javascript 中的处理程序函数中将说出 PHP 已转储的任何内容。

所以是的,你可以使用你喜欢的请求的任何部分,并返回你喜欢的任何部分。Javascript 发出哔哔声。

于 2013-06-05T03:00:04.230 回答