【问题标题】:Access JSON Ajax Response data访问 JSON Ajax 响应数据
【发布时间】:2017-04-05 10:56:51
【问题描述】:

我已向 JSON 数据添加了一个属性,但我无法访问它未显示的 JS 上的数据。我对 Ajax 和 JSON 并不陌生,但很明显,我在 Ajax 方面的知识仍然存在差距。请帮助我了解如何将数据附加到我的 Ajax 响应中。

我在 PHP 控制器类中有这个:

$x = '5';

if($request->ajax()){
    return response()->json([
        'total_questions' => $x,
        'responseText' => $e->getMessage(), 
    ], 500);
}

我想用 JS/JQuery 访问 total_questions 属性..

我的 JS AJAX 回调在这里: console.log('errors -> ', data.total_questions); - 返回未定义的

$.ajax({

    type:"POST",
    url: APP_URL+"selfEvaluation/save",
    data:$(this).serialize(),
    dataType: 'json',
    success: function(data){
        console.log(data);
    },
    error: function(data){
        var errors = data.responseJSON;
        console.log('data -> ', data);
        console.log('errors -> ', data.total_questions);

        if(data.status == 422){
            // alert('422');
        }
    }
});

这是我的控制台结果

【问题讨论】:

  • 你在 console.log 中得到了什么?
  • @Gaurav,检查编辑
  • 您能否在 json 响应中包含您收到的内容?
  • @GeninaAnneGabuten 我未定义
  • 您为什么要返回 500 响应代码。这是一个错误响应代码

标签: javascript php ajax laravel


【解决方案1】:

error: function(data){

是不正确的方法签名。请参阅http://api.jquery.com/jquery.ajax/ 的定义。 应该是

error: function(jqXHR, errorThrown, textStatus){

您需要访问jqXHR.responseJSON 属性。所以:

console.log('errors -> ', jqXHR.responseJSON.total_questions);

但我会质疑您为什么要为该请求返回“500”状态代码,而它似乎是一个有效的响应。 “500”表示“内部服务器错误”,这意味着服务器崩溃了,但它看起来并没有。如果您返回“200”(“OK”)状态,您的 ajax 代码将进入“成功”回调,您可以直接在回调中引用“数据”对象来读取您的数据。

【讨论】:

  • 我的目标只是将一个变量附加到 JSON 数据,当它从控制器返回到 JS 脚本时 - 所以如果有其他方法可以做到这一点。
  • 顺便说一句,我传递数据还是 jqXHR 都没有关系,.. 结果是一样的。
  • 确实“data”或“jqXHR”是可以互换的,你可以选择任何你喜欢的变量名,但我发现遵循jQuery约定更容易理解——毕竟变量中的内容是不是您的“数据”(位于子属性中),而是整个 XHR 响应。
  • “我的目标只是将一个变量附加到 JSON 数据中。”您已经成功实现了该目标,因为当 ajax 调用返回错误时,数据位于“responseJSON”属性中。但是,我质疑返回此请求的错误响应是否合适,尤其是 500。另请参阅我对上面主要问题的评论 - 在任何情况下,您似乎在到达这个阶段之前就遇到了问题,所以很可能您的数据没有附加到响应中,因为它在到达添加它的代码之前就失败了。
  • 我已经从 response()-> json(['']);在控制器中,但仍然没有结果
【解决方案2】:

如果您会从浏览器收到 json 响应,请尝试此操作。

if($request->ajax()){
    $result = array(
        'total_questions' => $x,
        'responseText' => $e->getMessage(), 
    ], 500);
}

echo json_encode($result); 

【讨论】:

  • OP 已经收到回复。这只是在没有他们使用的任何框架的情况下创建响应的方式。问题是他们无法在客户端解析它。
猜你喜欢
  • 1970-01-01
  • 2014-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多