Javascript AJAX请求返回';对象对象';
我一直在尝试并寻找解决方案,我有下面的脚本,但不幸的是,它返回Javascript AJAX请求返回';对象对象';,javascript,jquery,json,ajax,Javascript,Jquery,Json,Ajax,我一直在尝试并寻找解决方案,我有下面的脚本,但不幸的是,它返回object object var states = (function () { var states = null; $.ajax({ type: 'POST', 'async': false, 'global': false, 'url': "../home/GetAllTags", 'dataType': "json",
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”
,但我仍然不确定为什么会得到对象
有什么想法吗
干杯
编辑:返回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);
}
[HttpPost]
公共JsonResult GetAllTags()
{
List Tag_List=新列表();
Tag_List=GenerateList.Tags();
var TAGS=标签列表;
返回Json(TAGS.Select(t=>new{id=t.Tag\u id,val=t.Tag\u 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>
$(函数(){
var substringMatcher=函数(strs){
返回函数findMatches(q,cb){
var匹配,substringRegex;
匹配项=[];
substregex=新的RegExp(q,‘i’);
$。每个(str,功能(i,str){
if(子相关性测试(str)){
匹配.push({value:str});
}
});
cb(比赛);
};
};
变量状态=(函数(){
var状态=空;
$.ajax({
键入:“POST”,
//“异步”:false,
“全局”:错误,
“url”:“./my/GetAllTags”,
“数据类型”:“json”,
“成功”:函数(数据){
状态=数据;
}
});
返回状态;
})();
警报(国家);
var标记=$('input.stateinput');
tags.tagsinput();
$(标记)。每个(功能(i,o){
var taginput=$(o).tagsinput('input');
taginput.typeahead({
提示:没错,
推荐理由:没错,
最小长度:1,
自动选择:真
}, {
名称:“州”,
displayKey:'值',
来源:子字符串匹配器(状态)
}).bind('typeahead:selected',$.proxy(函数(obj,datum){
$(o).tagsinput('add',datum.value);
taginput.typeahead('val','');
}));
$(taginput).blur(函数(){
taginput.typeahead('val','');
});
});
});
结果:
正如我在评论中所建议的,要转换:
[{"val":"tag1"},{"val":"tag2"},{"val":"testing"},{"val":"test2"}]
致:
你可以用
map()
在调用数组中的每个元素上提供函数
var状态=[{
“val”:“tag1”
}, {
“val”:“tag2”
}, {
“val”:“测试”
}, {
“val”:“test2”
}];
var结果=states.map(函数(x){
返回x.val;
});
控制台日志(结果)
当您声明数据类型:'json'
时,您期望的是数组或对象,就像您得到的一样。JSON是从服务器发送的字符串数据格式,也从不使用async:false
。这是一种可怕的做法,不受欢迎。查看浏览器控制台中的警告您的更新对您的问题几乎没有任何补充@JaromandaX的问题“您如何使用状态?”实际上是唯一需要澄清的alert(状态)代码>将提示状态。toString()
。。。由于声明
是一个对象,{}.toString====[对象对象]。。。这就是你的答案。使用console.log
进行调试,而不是alert
。投票结束是一个打字错误
["tag1", "tag2","testing", "test2"]