AJAX请求返回'对象对象'

时间:2017-10-25 23:59:03

标签: javascript jquery json ajax

我一直在尝试并寻找解决方案,我有以下脚本但不幸的是,它返回object object作为回报

var states = (function () {
  var states = null;            
  $.ajax({                
    type: 'POST',
    'async': false,
    'global': false,
    'url': "../home/GetAllTags",
    'dataType': "json",
    'success': function (data) {                    
      states = data;
    }
  });
  return states;
})();  

我知道我可以做一个循环来将它添加到字符串但我需要Json,而不是字符串。此外,我清楚地定义输出是json 'dataType': "json",仍然我不确定为什么我得到object object

有什么想法吗?

干杯

编辑:返回json的控制器

[HttpPost]
public JsonResult GetAllTags()
{
    List<Models.Tags.MTag> Tag_List = new List<Models.Tags.MTag>();
    Tag_List = GenerateList.Tags();
    var TAGS = Tag_List;
    return Json(TAGS.Select(t => new { id = t.Tag_id, val = t.Tag_name }), JsonRequestBehavior.AllowGet);
}

编辑2 - 完整脚本

<script>

    $(function () {

        var substringMatcher = function (strs) {
            return function findMatches(q, cb) {
                var matches, substringRegex; 
                matches = [];
                substrRegex = new RegExp(q, 'i');
                $.each(strs, function (i, str) {
                    if (substrRegex.test(str)) {

                        matches.push({ value: str });
                    }
                });
                cb(matches);
            };
        };

        var states = (function () {
            var states = null;            
            $.ajax({                
                type: 'POST',
                //'async': false,
                'global': false,
                'url': "../my/GetAllTags",
                'dataType': "json",
                'success': function (data) {                    
                    states = data;
                }
            });
            return states;
        })();               

        alert(states);

        var tags = $('input.stateinput');
        tags.tagsinput();

        $(tags).each(function (i, o) {
            var taginput = $(o).tagsinput('input');
            taginput.typeahead({
                hint: true,
                highlight: true,
                minLength: 1,
                autoselect: true
            }, {
                    name: 'states',
                    displayKey: 'value',
                    source: substringMatcher(states)
                }).bind('typeahead:selected', $.proxy(function (obj, datum) {                   
                    $(o).tagsinput('add', datum.value);
                    taginput.typeahead('val', '');
                }));
            $(taginput).blur(function () {
                taginput.typeahead('val', '');
            });
        });

    });



</script>

结果

enter image description here

1 个答案:

答案 0 :(得分:2)

正如我在评论中建议的那样,转换:

[{"val":"tag1"},{"val":"tag2"},{"val":"testing"},{"val":"tes‌​t2"}]

为:

["tag1", "tag2","testing", "test2"]

您可以使用Array#map()

  

map() 方法创建一个新数组,其中包含调用a的结果   为调用数组中的每个元素提供了函数。

&#13;
&#13;
var states = [{
  "val": "tag1"
}, {
  "val": "tag2"
}, {
  "val": "testing"
}, {
  "val": "test2 "
}];
var result = states.map(function(x) {
  return x.val;
});
console.log(result);
&#13;
&#13;
&#13;

将JSON字符串解析为对象:

您可以使用JSON.parse()jQuery.parseJSON()

  

<强> JSON.parse()来

     

JSON.parse()方法解析JSON字符串,   构造字符串描述的JavaScript值或对象。   可以提供可选的reviver功能来执行   在返回之前对结果对象进行转换。

&#13;
&#13;
var states = [{
  val: "tag1"
}, {
  val: "tag2"
}, {
  val: "testing"
}, {
  val: "test2"
}];
console.log(typeof states); // => object
states = JSON.stringify(states);
console.log(typeof states); // => string
states = JSON.parse(states);
console.log(typeof states); // => object
&#13;
&#13;
&#13;

  

<强> jQuery.parseJSON()

     

采用格式良好的JSON字符串并返回生成的JavaScript   值。

&#13;
&#13;
var states = [{
  val: "tag1"
}, {
  val: "tag2"
}, {
  val: "testing"
}, {
  val: "test2"
}];
console.log(typeof states); // => object
states = JSON.stringify(states);
console.log(typeof states); // => string
states = $.parseJSON(states);
console.log(typeof states); // => object
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

最后:

&#13;
&#13;
var states = [{
  val: "tag1"
}, {
  val: "tag2"
}, {
  val: "testing"
}, {
  val: "test2"
}];
states = JSON.stringify(states);
var newstates = $.parseJSON(states);
var newstates3 = newstates.map(function(x) {
  return x.val;
});
console.log(newstates3);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

JavaScript Array