【问题标题】:What URL should Ajax call in an MVC project?Ajax 应该在 MVC 项目中调用什么 URL?
【发布时间】:2012-11-19 17:26:13
【问题描述】:

我是一个半新手,所以请多多包涵... 注意,我现在既不知道 jQuery 也不知道 Json

在我的 MVC 项目中(我没有使用框架,但该项目将前端控制器与 MVC 结合在一起),我有:
1)一个控制器,它将一些参数发送到一个DAO。 DAO 运行 MySQL 查询并将一系列文章发送回控制器。
2)一个视图层,我希望用户能够单击一个按钮从一个文章移动到另一个文章。我建议这样做的方式是通过 javascript Ajax 调用来获取 Controller 中生成的数组中的下一篇文章。

我的问题是:Ajax 函数调用的 URL 应该是什么?显然它不能调用控制器(或者可以吗?)。我应该添加一类专用的 Ajax 内容容器,控制器将使用数组实例化吗?我很难看到视图如何找到正确的 URL...控制器是否应该将参数传递给视图并让它请求查询?

【问题讨论】:

  • JSON 与 jQuery 无关。
  • 公平点 - 正如我所说,我对此一无所知。
  • 理解 JSON 需要 5 分钟。假设您了解 JavaScript。在 PHP 端,您在 JS 端使用 json_encode()JSON.parse()
  • 再次,公平点,但一次只做一件事。
  • 好吧..然后请求 XML。你知道XML!?或者,地狱,组成一个扩展,然后你可以稍后重构它以与 JSON 一起正常工作。

标签: php javascript ajax model-view-controller front-controller


【解决方案1】:

XHR(也称为 AJAX)调用在控制器级别没有什么不同,然后是经典的浏览器请求。不同之处仅在于您期望收到的响应。

这意味着,如果您已经完全实现了视图(不仅仅是愚蠢的模板),那么请求的类型应该只对视图很重要。您可以通过添加扩展轻松区分它们:

  • http://foo.in/user/list - 简单的请求
  • http://foo.in/user/list.json - XHR 请求

差异主要在路由机制上得到识别,它们在Request 实例上设置了具体细节。当控制器看到Request 实例有一个isXHR 标志时,它会告诉视图:“用不是完整的HTML 页面的东西来响应这个”

基本上,相同的控制器应该同时处理普通调用和 XHR 调用。其实你并不关心,它是什么类型的请求。只需要在响应中生成htmlxmljson

P.S.:模型层应该完全不受请求类型的影响。

【讨论】:

  • 这是唯一的方法吗?还有另一种更常见的方式来区分它们$_SERVER['HTTP_X_REQUESTED_WITH']
  • HTTP_X_REQUESTED_WITH 由 JS 框架发送。但是应该可以使用本机XMLHttpRequest 对象发送一些签名标头。但这并没有改变观点。控制器的行为不应受到通过 XHR 发出请求这一事实的影响。
  • @tereško - 感谢您为回答我的问题所付出的努力,但我不得不承认我完全迷路了。恐怕你认为我的知识水平比实际情况要高。 :)
【解决方案2】:

从上面的帖子列表中,我假设您必须知道 Ajax 语法才能在编辑文章时调用方法。

具体做法如下: 1. 最初在你的控制器中定义一个动作来满足你的目的(可能是在这种情况下编辑你的文章。) 2.通过ajax方法指定Controller和你要调用的动作。 ( 此时应该是 Articles -- Controller, EditArticle -- Action)。

控件会自动导航到特定的操作方法。

问候 帕万.G

【讨论】:

    【解决方案3】:

    取决于您使用的框架。但一般来说:

    您可以使用控制器发送一个“标志”(例如在一个 GET 变量中),它是一个 AJAX 查询,然后退出该函数,但是对于 AJAX 查询使用不同的控制器被认为是更好的路线 :)无论如何,类似这样的事情:

    function page() {
       if($_GET["is_ajax"] == "1") {
          // return the AJAX query
          return;
       }
    // go on with showing the page
    }
    

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-23
      • 2014-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-09
      • 2021-11-17
      • 2011-03-06
      相关资源
      最近更新 更多