【问题标题】:PHP JSON to AJAX not being parsed - JSON formatted properly未解析 PHP JSON 到 AJAX - JSON 格式正确
【发布时间】:2015-05-02 21:48:01
【问题描述】:

我最近开始将旧的Classic ASP 网站翻译成PHP。它的几个页面(Response.ContentType = "application/json") 只会提供JSON 响应,例如{"R":1},并且一切正常。

现在在 PHP 上,header("content-type:application/json") 首先在代码上,ajax 只是不会解析它。客户端 JS 代码与我之前使用的相同。我什至没有碰过它。

$.ajax({
   dataType: "json",
   type : "POST",
   url: "processthisrequest.php",
   cache: false,
   async: false,
   data: { Field1:"bla", Field2:"blabla"},
   error: function(data){
      // code on error
   },
   success: function(json){
      // code on success
   }
});

如果请求全部被接受,则它所提供的服务是 {"R":1},并像往常一样使用双引号。

无论如何,Ajax 都会触发错误函数。尝试调试它我发现了这个:

readyState:4
responseText:{"R":1}
status:200
statusText:OK

在寻求帮助时,我发现很多人在 ajax 获取 readyState:4、status:200 时遇到问题,并且响应仍未被解析。没有任何解决方案有效或适用于我的问题。

因为它与 IIS/ASP 一起使用,它可以与 Apache 或 PHP 一起使用吗?

更新: 仍然没有成功,但是如果我让服务器使用{"R":1} 提供 .js 文件,而不是通过 php 页面 ajax 处理响应,则会触发成功功能。这仅证明了我的观点,即这是一个 php 问题,并解释了为什么它与旧恐龙 ASP 一起使用。现在,为什么 PHP 没有提供正确的 mime 类型是我想要弄清楚的。

【问题讨论】:

  • 如果在错误函数中添加console.log(data);,控制台会得到什么?
  • readyState:4, responseText:"{"R":1}", status:200, statusText:"OK" 和所有其他属性的函数。
  • 尝试将dataType参数改为text,看看是否调用成功。
  • 我的意思是使用 fiddler 或浏览器的网络日志记录它,而不是 console.log
  • @user3584460 我整理好了。发表了回应。

标签: php jquery ajax json asp-classic


【解决方案1】:

我整理好了

PHP 有一些非常奇怪的做事方式。 在header("Content-Type: application/json") 行之后,我有一个include "file.php"。尽管处理 Ajax 请求的文件和包含文件都保存为 Unicode 一个有BOM 签名而另一个没有。

处理这两个文件后,PHP 会向浏览器发送“一些东西”,而这只是一个正确的 application/json 响应,它不允许 Ajax 解析它。

我知道我应该在这里保持重点,但我很沮丧,我需要添加这条评论:在这件事上浪费了我将近 18 个小时的生命之后,我本可以把时间用在其他事情上,我唯一能从这次经历中学到的是,免费软件根本就不是免费的。

【讨论】:

    猜你喜欢
    • 2016-07-18
    • 2015-09-15
    • 1970-01-01
    • 1970-01-01
    • 2016-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多