【问题标题】:Javascript says undefined after reading json server error response sent by cakephpJavascript 在读取 cakephp 发送的 json 服务器错误响应后显示未定义
【发布时间】:2013-05-24 15:42:01
【问题描述】:

下面是我的 AJAX 方法,它能够连接到服务器:

$.ajax({ 类型:'POST', 网址:$form.attr('action'), 数据:表格数据, 数据类型:'json', 成功:函数(数据){ 控制台.log(data.id); }, 错误:函数(消息){ console.log(message.code); } });

下面是我为 cakephp UsersController 类创建的响应请求的方法:

公共功能登录(){ if ($this->request->is('post')) { if ($this->Auth->login()) { return new CakeResponse(array('body'=> json_encode( $this->Auth->user()),'status'=>200)); } 别的 { $reply["code"] = "用户名无效或 密码,请再试一次"; 返回新的 CakeResponse (array('body'=> json_encode($reply),'status'=>500)); } } }

问题是,当服务器发送错误时,我无法读取 json 响应。下面截断的 console.log 应该写“无效的用户名或密码,请重试”,但它显示 undefine。

错误:函数(消息){ console.log(message.code); }

但是,我可以阅读以下内容:

成功:函数(数据){ 控制台.log(data.id); }

【问题讨论】:

  • “服务器发送错误”是指当 login() php 函数返回错误或服务器返回错误时?据我了解,如果 login() 返回错误,这不会触发 ajax 错误处理程序但仍然成功{服务器已正确响应}

标签: php javascript jquery ajax cakephp


【解决方案1】:

您的 jQuery error 回调的参数描述为here:

所以第一个参数是jqXHR 对象,描述为here:

所以我猜你可以阅读它的responseText 属性。

error: function(jqXHR, textStatus, errorThrown) {
    var message = JSON.parse(jqXHR.responseText);
    console.log(message.code);
}

【讨论】:

    【解决方案2】:

    在您的以下代码中:

    error: function(message){
          console.log(message.code);
    }
    

    您将收到服务器发送的错误,而不是您尝试从代码中获取的错误。 从服务器端读取错误。使用下面的代码:

    error: function(message,err,xtr){
          console.log(JSON.stringify(message)+" "+err+ " " +xtr);
    }
    

    【讨论】:

    • 此代码有效,但它不会将响应转换为对象。
    • @madi 您可以使用JSON.parse 将响应转换为对象。
    • 是的。如@antoine 所示。感谢您的最快回复。
    猜你喜欢
    • 2018-08-11
    • 2012-04-03
    • 2014-11-30
    • 1970-01-01
    • 2016-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多