2 yu766588220 yu766588220 于 2015.05.30 15:39 提问

jquery $.post 或者$.get回调函数的参数值有没有办法取出来

例如

 var ajaxData=[];
    $.post("/echarts/loginAction",{dataNumInView:60,startRow:0},function(data)
    {
         ajaxData.push(data.test);

     });


这个data有办法取出来吗

10个回答

tbwangxw
tbwangxw   2015.05.30 16:29
已采纳

是要把data放到其它地方使用或对data数据进行操作吗?
如果是

var ajaxData=[];
$.post("/echarts/loginAction",{dataNumInView:60,startRow:0},function(data)
{
ajaxData=data;
ajaxData.push(data.test);
});

tbwangxw
tbwangxw 回复ice-prince: var aj = $.ajax({url: strPath,type: 'get',datatype: 'json',success: function (data,) {}
2 年多之前 回复
tbwangxw
tbwangxw 回复tbwangxw: success:function(),
2 年多之前 回复
tbwangxw
tbwangxw 回复ice-prince:用过这种方法,测试为undefined是回调函数还未获得数据,而你已经在测试了,正确的要加上,success:runction(),在此之后数据是得到的
2 年多之前 回复
yu766588220
yu766588220 额。。。你可以测试下,在post函数外面alert(ajaxData[0]),是一个undefined
2 年多之前 回复
tbwangxw
tbwangxw var ajaxData;
2 年多之前 回复
guwei4037
guwei4037   Ds   Rxr 2015.05.30 16:04
chengyi_L
chengyi_L   2015.05.30 16:44

你在服务端能取到传入的data吗?
如果能取到应该是data的数据类型问题,
尝试定义回调数据类型为json,或者用eval将data装成json对象
var obj = eval( "(" + data + ")" );
ajaxData.push(data.test);

showbo
showbo   Ds   Rxr 2015.05.30 17:55

改为$.ajax,并且将async设置为false同步请求,要是用$.post/$.get你只能将要执行的代码放到会滴里面,无法往外传递返回值

     function ajaxcall() {
        var ajaxData = [];
        $.ajax({
            dataType: 'json',
            url: "/echarts/loginAction",
            async:false,////////
            data: { dataNumInView: 60, startRow: 0 }
            , success: function (data) {
                ajaxData.push(data.test);
            }
        });

        return ajaxData
    }
tbwangxw
tbwangxw   2015.05.30 18:34

方法两种:一种同步方式,一种异步方式
同步方式与showbo所讲基本相同,但需要考虑效率,网络不好时会是什么情况应该清楚,另要加入error: function()处理
由于javascript是单线程的,同步方式不是非常建议。

异步方式:
两个变量,一个是标志(主要用于判断是数据是已经接收到),一个是数据(存储接收的数据)
一个处理函数
post后,success:时更改标志变量,输出数据
error:时更改标志,
运行后执行数据处理

数据处理函数
判断标志,以确定数据是否已经接收,如果没有用延时或计时器,等待后再重新判断处理数据,或由success去激活数据处理数函数。
标志可设为0,1,2,等等
0:未接收到数据,1接收到数据,2,未接收到数据,psot出错即error

s857875945
s857875945   2015.05.30 20:08

我能想到的就是先把data放进一个页面的元素里,让后在从这个元素里取

testcs_dn
testcs_dn   Rxr 2015.05.31 06:53

看了半天,让我很迷茫,ajaxData.push(data.test); 这不已经可以取到了嘛?
你还想怎么操作它。

testcs_dn
testcs_dn var ajaxData=[]; $.post("/echarts/loginAction",{dataNumInView:60,startRow:0},function(data) { ajaxData.push(data.test); });
2 年多之前 回复
yu766588220
yu766588220 你alert(ajaxData[0]),如果把这句代码放进$.post函数里面,你会发现会显示出ajax取得的数据。若你把alert(ajaxData)放到外面,则是一个undefined。这主要是函数拿到一个变量的时候,是拿到这个变量的拷贝。我现在要做到的就是想即使我把alert(ajaxData[0])拿出$.post函数外面,弹出的是从ajax取到的数据而不是undefined。
2 年多之前 回复
yy839126257
yy839126257   2015.05.31 11:37

你返回是什么格式的,确定能往数组里加?

yu766588220
yu766588220 这个您放心,绝对可以往里面加。json格式的
2 年多之前 回复
testcs_dn
testcs_dn   Rxr 2015.06.04 14:45

要么像楼上说的,把AJAX调用改为同步的,
要么使用回调,

 var ajaxData=[];
    $.post("/echarts/loginAction",{dataNumInView:60,startRow:0},callbackFun);

        function callbackFun(data){
             ajaxData.push(data.test);
            alert(data);
        }
testcs_dn
testcs_dn 回复ice-prince: 回调函数写在哪都可以啊,这样就不需要全局变量ajaxData了。
2 年多之前 回复
yu766588220
yu766588220 嗯,我现在操作都是写在回调里,没有拿出来。只是如果能拿出来的话,代码会漂亮些
2 年多之前 回复
syjgreen07
syjgreen07   2015.06.17 16:44

设置一个全局变量,然后将data值赋给这个全局变量即可

Csdn user default icon
上传中...
上传图片
插入图片