我一直在尝试并寻找解决方案,我有以下脚本但不幸的是,它返回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>
结果:
答案 0 :(得分:2)
正如我在评论中建议的那样,转换:
[{"val":"tag1"},{"val":"tag2"},{"val":"testing"},{"val":"test2"}]
为:
["tag1", "tag2","testing", "test2"]
您可以使用Array#map()
map()
方法创建一个新数组,其中包含调用a的结果 为调用数组中的每个元素提供了函数。
var states = [{
"val": "tag1"
}, {
"val": "tag2"
}, {
"val": "testing"
}, {
"val": "test2 "
}];
var result = states.map(function(x) {
return x.val;
});
console.log(result);
&#13;
将JSON字符串解析为对象:
您可以使用JSON.parse()或jQuery.parseJSON()。
<强> JSON.parse()来强>
JSON.parse()方法解析JSON字符串, 构造字符串描述的JavaScript值或对象。 可以提供可选的reviver功能来执行 在返回之前对结果对象进行转换。
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;
<强> jQuery.parseJSON()强>
采用格式良好的JSON字符串并返回生成的JavaScript 值。
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;
最后:
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;