JS一个var如何接受后台传回json数据

easyUI有个demo上面是这样的

 <script>
var products = [
{productid:'FI-SW-01',name:'Koi'},
{productid:'K9-DL-01',name:'Dalmation'},
{productid:'RP-SN-01',name:'Rattlesnake'}]
<script>
 <body>
<th field="productid" width="100" formatter="productFormatter" editor="{type:'combobox',options:{valueField:'productid',textField:'name',data:products,required:true}}">Product</th>
</body>

就是一个下拉选有3个选项,Koi、Dalmation和Rattlesnake,现在说我的下拉选的选项需要从后台获取数据,那么我想要这个var products = 后台获得的json数据,怎么做?就是一个json数据赋值给JS变量问题,我试过在函数里面定义一个var接受json数据但是不行。如下:

 $.ajax({
url:'${pageContext.request.contextPath}/AjaxRegistration_list'
})
.done(function(response){
console.log("success"+JSON.stringify(response));
var products = JSON.stringify(response);
//这里能打印出json数据,但是上面的var products好像并不能被th中的editor使用data:products这样接受
alert(products);
})
.fail(function(){
console.log("error")
});

7个回答

不清楚你返回json的response内容是怎样,假如是这样的:

 {
   "data" :
      [
         {
            "productid" : "FI-SW-01",
            "name" : "Koi",
         },
         {
            "productid" : "K9-DL-01",
            "name" : "Dalmation",
         }
      ],
   "success" : true
}

栗子:

 <script>
var products = [];
for(var i=0;i<response.data.length;i++){
    var obj=response.data[i];
    products.push({
        productid:obj.productid,//'FI-SW-01',
        name:obj.name//'Koi'
    })
}
console.log(products);
</script>
EncodingGentleman
EncodingGentleman 是格式问题,我犯2了,解决了,谢谢!
2 年多之前 回复
xing2208
xing2208 回复EncodingGentleman: 取不出是作用域问题,你要先定义变量才能被外部使用
2 年多之前 回复
EncodingGentleman
EncodingGentleman 返回的json格式是这样的[ { "productid" : "FI-SW-01", "name" : "Koi", }, { "productid" : "K9-DL-01", "name" : "Dalmation", } ],但是现在好像不是格式问题,我直接var products = 【{....}】这种直接手动输入不用后台获取的方式,把var定义在$(function(){//这里面}),取不出来,把var products定义在<script>//定义在这里</script>就可以
2 年多之前 回复

combobox需要的数据格式是[
{productid:'FI-SW-01',name:'Koi'},
{productid:'K9-DL-01',name:'Dalmation'},
{productid:'RP-SN-01',name:'Rattlesnake'}]数组格式的;
我觉得你应该是数据格式不对吧。

EncodingGentleman
EncodingGentleman 谢谢!
2 年多之前 回复

你应该用JSON.parse()而不是用JSON.stringify()

zhaokun900124
zhaokun900124 回复EncodingGentleman: 嗯,你需要在外边先定义products才行,你在内部定义在外边是取不到的
2 年多之前 回复
EncodingGentleman
EncodingGentleman 解决了,谢谢,上边老哥的代码有用,分给他了,没办法给多个,抱歉
2 年多之前 回复
zhaokun900124
zhaokun900124 回复EncodingGentleman: 你在外边定义var products = {}试试
2 年多之前 回复
EncodingGentleman
EncodingGentleman 格式问题我应该能解决,我主要是解决不了<script>var products = [{}]</script>和<script>$(function(){var products=[{}]})这
2 年多之前 回复
EncodingGentleman
EncodingGentleman 用JSON.parse()就报错Uncaught SyntaxError: Unexpected token o in JSON at position 1 at JSON.parse (<anonymous>) at Object.eval (eval at <anonymous> (jquery-1.7.2.min.js:2), <anonymous>:48:20) at o (jquery-1.7.2.min.js:2) at Object.fireWith [as resolveWith] (jquery-1.7.2.min.js:2) at w (jquery-1.7.2.min.js:4) at XMLHttpRequest.d (jquery-1.7.2.min.js:4)
2 年多之前 回复

var url = "admin/FrmQueryAllGroup.do";
$.getJSON(url,function(json) {
$('#cc').combobox({
data: json.jsonResult.rows,
valueField: 'ID',
textField: 'TEXT'
});
});

$.ajax({
type: "POST",
url: 'admin/FrmQueryAllGroup.do',
dataType: "json",
success: function(json) {
$('#cc').combobox({
data: json.jsonResult.rows,
valueField: 'ID',
textField: 'TEXT'
});
}
});

EncodingGentleman
EncodingGentleman 谢谢老哥
2 年多之前 回复


Product

不用看都知道跟你的插件方式冲突,你想想直接js接受可以,这样不可以,要么是你的插件不支持这样获取,要么是你这个地方获取的方式有问题
baidu_33403616
再写三行 回复EncodingGentleman: 解决了就好
2 年多之前 回复
EncodingGentleman
EncodingGentleman 是获取的json字符串后取法错误了,谢了老哥
2 年多之前 回复

你得把你console输出的response贴出来,才能看到你response响应的值,根据这个值去取值

EncodingGentleman
EncodingGentleman 我问题解决了,你这这个办法好,以后这么搞。
2 年多之前 回复

你前面已经定了products,你再回调函数里面又重新定义了products,这个回调函数里的变量成了局部变量,不会赋值上层的全局变量products。

EncodingGentleman
EncodingGentleman 懂了,谢谢你的回复
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问