草庐IT

关于 php:在 MVC 项目中 Ajax 应该调用什么 URL?

codeneng 2023-03-28 原文

What URL should Ajax call in an MVC project?

我是一个半新手,所以请多多包涵……注意,我现在既不知道 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 一起正常工作。


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

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

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

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

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

P.S.: model layer should be completely unaffected by the type of requests.

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


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

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

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

问候
帕万.G


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

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

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

希望这会有所帮助!

有关关于 php:在 MVC 项目中 Ajax 应该调用什么 URL?的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  3. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  4. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  5. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  6. ruby - 为什么 4.1%2 使用 Ruby 返回 0.0999999999999996?但是 4.2%2==0.2 - 2

    为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返

  7. ruby - 检查 "command"的输出应该包含 NilClass 的意外崩溃 - 2

    为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar

  8. ruby-on-rails - rails : save file from URL and save it to Amazon S3 - 2

    从给定URL下载文件并立即将其上传到AmazonS3的更直接的方法是什么(+将有关文件的一些信息保存到数据库中,例如名称、大小等)?现在,我既不使用Paperclip,也不使用Carrierwave。谢谢 最佳答案 简单明了:require'open-uri'require's3'amazon=S3::Service.new(access_key_id:'KEY',secret_access_key:'KEY')bucket=amazon.buckets.find('image_storage')url='http://www.ex

  9. ruby - 如何使用 Ruby aws/s3 Gem 生成安全 URL 以从 s3 下载文件 - 2

    我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A

  10. ruby - ruby 中的 TOPLEVEL_BINDING 是什么? - 2

    它不等于主线程的binding,这个toplevel作用域是什么?此作用域与主线程中的binding有何不同?>ruby-e'putsTOPLEVEL_BINDING===binding'false 最佳答案 事实是,TOPLEVEL_BINDING始终引用Binding的预定义全局实例,而Kernel#binding创建的新实例>Binding每次封装当前执行上下文。在顶层,它们都包含相同的绑定(bind),但它们不是同一个对象,您无法使用==或===测试它们的绑定(bind)相等性。putsTOPLEVEL_BINDINGput

随机推荐