javascript - 处理 PHP JavaScript (AJAX) 返回数据的最正确/友好的方法是什么?

标签 javascript php ajax response responsetext

编辑:好吧,现在我想了一下,JSON 听起来确实不错,只要我编码正确,就不应该出现语法错误来破坏它或任何东西。

<小时/>

晚上好!

一直困扰我的是如何处理 AJAX 请求中 PHP 返回的数据,以及如何返回数据!

假设我有一个登录表单,它通过 AJAX 处理提交的表单数据。为了简单起见,我们会说我们使用 GET。

“page.php?用户名=Foo&密码=bar”

这就是让我烦恼/烦恼的事情,以及为什么我感到强制症并感觉好像我需要知道执行此操作的正确方法:

我已发送数据并且已对其进行处理。 现在怎么办?

假设我的用户名和密码有效/正确。我该怎么办?

在 PHP 中返回 true?字符串?

那么我该如何处理 JavaScript?

   if(ajaxRequest.responseText=="true"){
       //Username and password are correct! Execute this...
   }

我认为一个很酷的想法是将 JSON 对象作为字符串返回,并通过 JavaScript 进行解析。

  var object=JSON.parse(ajaxRequest.responseText);
  if(object.success=="true"){
       //Username and password are correct! Execute this...
   }

但是,如果我的用户名和密码组合...错误怎么办? 我是通过 PHP 返回 false 还是再次返回字符串?

truefalse之间,只有2个选择: 1.用户名和密码正确 2.用户名和密码不正确

但是如果用户名根本不存在怎么办?返回“false”并不能帮助我准确地告诉客户他们无法登录的原因。

深入研究我的强制症,意外或解析错误怎么样?

如果存在某种数据库连接错误或解析错误,我如何返回以告诉用户?我研究了尝试...和捕获语法错误,但我没有运气。

我最近的一个想法是这样做:

如果一切正常执行,并且用户名和密码存在(回到我们最初的场景),那么我们不会返回任何内容。响应文本将是一个空字符串。这意味着用户登录成功!

否则,如果出现错误,DO 返回某些内容(通常是字符串)并将其显示为错误。

我的处理方式正确吗?我走在正确的道路上吗?

最佳答案

我个人的偏好是使用 JSON 来处理所有事情,这绝不是“正确的”方法。

所以我有一个 JavaScript 函数,当提交表单时,它将把表单数据转换为 JSON 字符串并将其 POST 到服务器。

服务器然后处理它,并返回另一个 JSON 对象。因此,在您的登录示例中,服务器将收到:

{"username":"Foo","password":"bar"}

它会返回以下之一:

{"ok":false,"error":"No user with that name was found."}
{"ok":false,"error":"The password you entered was incorrect."}
{"ok":false,"error":"Failed to log you in (error code: ###)"}
{"ok":true,"redirect":"/home"}

每个 AJAX 请求响应都有这个“ok”属性。如果为 false,则会有一个“错误”属性,说明发生了什么(并且根据情况可能会有其他数据)。成功时,“ok”属性为 true。很多请求只是单独获取 {"ok":true} ,但有时这里也有其他数据。

正如我所说,这不是“正确”的做法,但我喜欢它并且它是一致的。

编辑:忘记提及有关 PHP 错误的信息。

接收服务器响应的 JavaScript 尝试使用 try...catch block 将其解析为 JSON。如果解析失败,则表示服务器出现错误。在这种情况下,会弹出一条错误消息,其中包含来自服务器的原始响应,并附有一条注释,建议用户就该错误消息与我联系。

关于javascript - 处理 PHP JavaScript (AJAX) 返回数据的最正确/友好的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19904708/

相关文章:

php - 如何通过 PDO 查询安全地使用 $_GET ["id"]?

php - 使用 javascript 和/或 php 生成 pdf 的更好方法是什么?

jquery - 使用新请求更新数据表并添加/删除列

java - 如果 Wicket 表单组件设置为 "required"是否可以动态更改?

ruby-on-rails - 我们如何使用 AJAX 发送/获取 http header 信息?

javascript - Firebase 托管 - 仅限成员(member)/安全网页?

javascript - &lt;script&gt; 可以有哪些其他类型?

php - 尝试在 mac os mavericks 上使用 mysql、php 和 apache 连接到本地主机

javascript - 从 Redux reducer 中的对象复制原型(prototype)函数

javascript - Mongoose 从远程服务器获取外部数据