Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Can';t解析JSON响应_Javascript_Jquery_Ajax_Json - Fatal编程技术网

Javascript Can';t解析JSON响应

Javascript Can';t解析JSON响应,javascript,jquery,ajax,json,Javascript,Jquery,Ajax,Json,我正在尝试解析以下JSON响应: { "AgApplyTableE*!": [ { "Index": 1, "StringVal": "Error: Enabled virtual server 3 has no IP address.U+0085Error: Apply not done. Use 'diff' to see pending changes,U+0085 then use configuration menus to correct err

我正在尝试解析以下JSON响应:

{
  "AgApplyTableE*!": [
    {
      "Index": 1,
      "StringVal": "Error: Enabled virtual server 3 has no IP address.U+0085Error: Apply not done.  Use 'diff' to see pending changes,U+0085 then use configuration menus to correct errors.U+0085"
    }
  ]
}
这是我的密码:

$('#applyfailreason').click(function (){    
  var t = $(this);
  var DeviceName = $('.DeviceName').val();
  var Username = $('.Username').val();
  var Password = $('.Password').val();

  $.ajax({
    method: 'GET',
    url: 'http://' + DeviceName + '/config/AgApplyTable',
    headers: {
      "Authorization": "Basic " + btoa('' + Username + '' + ":" + '' + Password + '')
    },
    dataType: 'json',
    contentType: 'application/json',
    success: function(data) {
      var test = JSON.stringify(data);
      console.log(test);
    },
    statusCode: {
      406 : function() {
        alert('There is an unexpected string in your data.\nFix the error and try again.');
      },
      401 : function() {
        alert('Wrong username or password.');
      }
    },
  });                   
});
我在控制台上获得以下信息(这是正常的):

但我只想打印JSON响应中的“StringVal”。 尝试:

给出:

undefined
我还尝试了以下方法(使用
数据类型:'jsonp',
):

但是Chrome会向一个奇怪的URI发送一个GET请求(实际上会给出200OK):

我得到以下错误:

Uncaught SyntaxError: Unexpected token :
知道如何在JSON响应中只打印“StringVal”到控制台吗

谢谢。

使用
console.log(数据['agapplytable*!'][0].StringVal)

在您的回答中,没有作为数据的直接子缓存的
StringVal
。属性
StringVal
位于内部对象
agapplytable*内因此data.StringVal未定义

另外,我在这里看到的另一个问题是,您正在对响应进行字符串化,然后尝试访问属性
StringVal
。 如果
stringify
,则
test
变量将是一个字符串,并且字符串没有属性
StringVal
(除非您在proto中设置了该属性)

编辑: 添加了缺少的
[0]
索引。

试试看

var test2 = data["AgApplyTableE*!"][0].StringVal;
console.log(test2);

您的响应是一个包含一个名为“agapplytable*!”的属性的对象,该属性是一个包含一个元素的数组,该元素是一个包含属性“StringVal”的对象


因此,您必须通过
数据[“agapplytable*!”][0]访问它。StringVal

我认为这是因为这里有两个级别,而不仅仅是一个。为了得到这个值,您可能需要

var test2 = JSON.parse(data);
console.log(test2["AgApplyTableE*!"][0].StringVal);
尽管我不确定阿帕普利泰*!在这里是一个非常好的标识符。也许你可以改变其他东西,然后你也可以使用。到达成员的符号

test ={"AgApplyTableE*!":[{"Index":1,"StringVal":"Error: Enabled virtual server 3 has no IP address.U+0085Error: Apply not done.  Use 'diff' to see pending changes,U+0085       then use configuration menus to correct errors.U+0085"}]};

console.log(test["AgApplyTableE*!"][0]["StringVal"]);

var test4=JSON.parse(data.agapplytable*![0][StringVal])您是否尝试过此
var test2=JSON.stringify(数据[“agapplytable*!”][0].StringVal)这是不正确的。“AgApplyTableE*!”是一个包含一个对象的数组。@Maverick您的代码对我有用。谢谢!谢谢大家的帮助!在test2之后删除点运算符:
test2[“agapplytable*!”]
您的代码永远无法使用JSON.stringify。test2不是一个对象,而是一个json。感谢您的修复步骤。你说得对,我抄错了。修正为JSON.parse,因为它应该是这样的。我真的希望人们能够真正测试他们的帖子,而不是在修改了一半的代码后再编辑它。会给每个人一些时间:)当然。但是当你认为它很简单,并且你肯定有正确的答案时,你只要把它写下来,试着为自己节省一些时间。我当时很匆忙,仍然试图帮忙,但在复制粘贴时犯了一个错误。我并不完美。有时候每个人都会这样。我接受了修复并编辑了我的帖子,这样下次有人看到它时,就可以看到正确的解决方案,而不必浪费时间去浏览评论以获得好的解决方案。
Uncaught SyntaxError: Unexpected token :
var test2 = data["AgApplyTableE*!"][0].StringVal;
console.log(test2);
var test2 = JSON.parse(data);
console.log(test2["AgApplyTableE*!"][0].StringVal);
test ={"AgApplyTableE*!":[{"Index":1,"StringVal":"Error: Enabled virtual server 3 has no IP address.U+0085Error: Apply not done.  Use 'diff' to see pending changes,U+0085       then use configuration menus to correct errors.U+0085"}]};

console.log(test["AgApplyTableE*!"][0]["StringVal"]);