php - Ajax 响应在服务器上是 JSON,而在本地计算机上使用 CakePHP 时是 STRING,为什么?

标签 php ajax json cakephp

在本地和服务器上,我使用相同的代码得到不同的结果。

在本地,我的结果以字符串形式到达,而在服务器上,相同的代码返回 JSON 对象。谁能告诉我为什么?

JavaScript:

$.post(
    url, // Various urls of type '/users/add_secondary_email_ajax'
    data,
    function(res){
        if (typeof(res.success)=='undefined'){
            ModalManager.update_body_html(res);
        }else{
            callback_success(res);
        }
    }
);  

CakePHP:

$this->autoRender = false; 
$this->RequestHandler->respondAs('json');
echo json_encode( array('success'=>true) ); // this arrives as string locally
return;     

我在另一台计算机上也可以使用此功能,但在这台计算机上则不行。可能是一些 PHP 设置吗?

两台计算机具有相同版本的 Browser 和 CakePHP 版本 (2.2.3)。

我发现 PHP 和 Apache 版本之间存在差异。也可能是设置,但我不知道在哪里看。

损坏的计算机上的 header :

Request URL:localhost/alert_subscribers/subscribe_ajax
Request Method:POST
Status Code:200 OK

Request Headers 
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8,bg;q=0.6
Connection:keep-alive
Content-Length:153
Content-Type:application/x-www-form-urlencoded; charset=UTF-8
Cookie:timezoneoffset=-120; viewedJobsGuest=[24]; __atuvc=13%7C11%2C46%7C12; CAKEPHP=dfbf9407743d43eb619a42aa5dbda735; toolbarDisplay=hide
Host:jobsadvent.dev
Origin:URL:localhost
Referer:URL:localhost/search
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.152 Safari/537.36
X-Requested-With:XMLHttpRequest

Form Data
data[title]:the title
data[email]:<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="bed8dfd5db8cfed6d1cad3dfd7d290ddd1d3" rel="noreferrer noopener nofollow">[email protected]</a>
data[alert]:1

Response Headers 
Connection:Keep-Alive
Content-Length:57
Content-Type:text/html
Date:Fri, 21 Mar 2014 10:19:06 GMT
Keep-Alive:timeout=5, max=100
Server:Apache/2.2.26 (Unix) DAV/2 PHP/5.4.24 mod_ssl/2.2.26 OpenSSL/0.9.8y
X-Powered-By:PHP/5.4.24

工作计算机上的标题

Request URL:http://domain.com/alert_subscribers/subscribe_ajax
Request Method:POST
Status Code:200 OK

Request Headers
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8,bg;q=0.6
Connection:keep-alive
Content-Length:162
Content-Type:application/x-www-form-urlencoded; charset=UTF-8
Cookie:__atuvc=1%7C10%2C5%7C11; timezoneoffset=-120; CAKEPHP=sb3013ffk40h7o1jhsl8ulqfj4; toolbarDisplay=hide
Host:domain.com
Origin:http://domain.com
Referer:http://domain.com/search
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.152 Safari/537.36
X-Requested-With:XMLHttpRequest

Form Data 
data[title]:the title
data[email]:<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="fd9b9c9698bd959289909c9491d39e9290" rel="noreferrer noopener nofollow">[email protected]</a>
data[alert]:1

Response Headers 
Connection:close
Content-Length:57
Content-Type:application/json
Date:Fri, 21 Mar 2014 10:24:32 GMT
Server:Apache/2.2.15 (CentOS)
X-Powered-By:PHP/5.3.3

至于 routes.php 文件,两者是相同的并包含以下行:

Router::parseExtensions('json');

最佳答案

可能是您的 apache 设置的问题:

Apache sending incorrect response header for .js files 上给出的答案建议您需要类似的东西

<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>

获取正确的内容类型。

关于php - Ajax 响应在服务器上是 JSON,而在本地计算机上使用 CakePHP 时是 STRING,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22331267/

相关文章:

php - 未定义索引 PHP/mySQL

php - 三个不同表的查询结果可以放到一个数组中吗?

php - 将 ajax 响应从 windows-1255 转换为 UTF8

java - 在java中从字符串中读取json

javascript - getJSON 和 mod 重写

php - foreach 循环中的 array_intersect

php - 通过ajax接收数据,不将数据插入mysql数据库

php - 如何在jquery中使用Ajax传递带有值的数组并在Php页面中获取值

python - flask-如何从JSON GET请求获取参数

php - PostgreSQL Base64 图像解码问题