如何从ajax返回数据

时间:2014-04-17 09:42:55

标签: javascript ajax

我在javascript中有一个包含数据的ajax函数,当我尝试返回它时什么都没有 我的代码:

function get_conv_data(click_id,server) {  
var tmp; 
new Ajax.Request(ajaxUrl, 
    {   
        method: 'post',
        parameters: {
            'act': 'get_conv_data',                
            'click_id': click_id,
            'server':server              
        },
        onSuccess: function(res) 
        {
            alert(click_id+'xx'+server);

         tmp=res.responseText; 
        }
    }); 
    return tmp;
}

数据是“活着的”。在ajax里面(警报打印是好的)但现在我想将它返回到php数组我得不到结果, 这是为什么?感谢

6 个答案:

答案 0 :(得分:2)

这是因为return tmponSuccess

之前运行
function get_conv_data(click_id,server, cb) {  
var tmp; 
new Ajax.Request(ajaxUrl, 
    {   
        method: 'post',
        parameters: {
            'act': 'get_conv_data',                
            'click_id': click_id,
            'server':server              
        },
        onSuccess: function(res) 
        {
            cb(res.responseText);
        }
    }); 
}

get_conv_data((YOUR ID THING HERE),function(data){
    console.log(data);
});

这样做。

答案 1 :(得分:1)

Ajax根据定义是异步的。这意味着,它在"背景"中执行。继续执行其余程序。因此,当Ajax执行时,get_conv_data将返回。在成功从服务器获取数据后,它将执行onSuccess方法(即当你的" alive"被打印")。

因此执行时间表如下:

get_conv_data --> initiate Ajax --> return;
                           Ajax request--> Server response --> onSuccess call;

@smistry建议的方法是一个很好的方法。

答案 2 :(得分:1)

Javascript框架是单线程进程,ajax在单独的线程中运行,使用async使得ajax同步为:false,这将使ajax正常的方法/函数

答案 3 :(得分:1)

Ajax调用是异步的。这意味着在调用Ajax.Request之后立即调用return tmp,而不等待ajax请求的响应。为了使您的变量包含响应的值,您可以在Ajax.Request主体中设置async:false

var tmp
new Ajax.Request(ajaxUrl, 
{   
    method: 'post',
    async: false,
    parameters: {
        'act': 'get_conv_data',                
        'click_id': click_id,
        'server':server              
    },
    onSuccess: function(res) 
    {
        alert(click_id+'xx'+server);

     tmp=res.responseText; 
    }
}); 

或在onSuccess函数中执行您想要的操作。

希望有所帮助

答案 4 :(得分:1)

Ajax意味着异步

Ajax意味着异步,因此您无法在函数内部返回响应。您需要创建一个回调函数。同步ajax崩溃/锁定浏览器。

以下是一些基于xhr2的ajax示例,女巫应该是现在的标准。 它受到所有新浏览器的支持,包括ie10,android& IOS。

简单获取ajax功能

//url,callback
function ajax(a,b,c){
 c=new XMLHttpRequest;
 c.onload=b;
 c.open('get',a);
 c.send()
}

用法

ajax(url,callback);

如何访问回调中的返回值

function callback(e){
 e.target.response
 this.response
 c.response// if inline inside the ajax function.
}

复杂的ajax功能

//url,callback,type,FormData,uploadFunc,downloadFunc
function ajax(a,b,e,d,f,g,c){
 c=new XMLHttpRequest;
 !f||(c.upload.onprogress=f);
 !g||(c.onprogress=g);
 c.onload=b;
 c.open(e||'get',a);
 c.send(d||null)
}

用法

var fd=new FormData();
fd.append('act','get_conv_data');
fd.append('click_id',click_id);
fd.append('server',server);
ajax(ajaxUrl,callback,'post',fd);

function callback(){
 //when the request finishes do stuff with the response.
 alert(this.response)
}

HTML

<form id="form">
 <input name="server" value="serverBLABLA">
 <input name="click_id" value="click_idBLABLA">
 <input name="act" value="get_conv_data">
</form>

JS

ajax(ajaxUrl,callback,'post',new FormData(document.getElementById('form')));

function callback(){
 //when the request finishes do stuff with the response.
 alert(this.response)
}

有关此功能的更多信息

https://stackoverflow.com/a/18309057/2450730

答案 5 :(得分:0)

这是因为Javascript的异步执行功能。在数据到来之前,并在您的&#34; tmp&#34;变量,返回执行。所以你得到的是空白数据。尝试以下解决方案希望这对你有用:

    function get_conv_data(click_id,server) {  
    var tmp; 
    new Ajax.Request(ajaxUrl, 
    {   
    method: 'post',
    parameters: {
        'act': 'get_conv_data',                
        'click_id': click_id,
        'server':server              
    },
    onSuccess: function(res) 
    {
    alert(click_id+'xx'+server);
    tmp=res.responseText; 
    return tmp;
    }
    }); 
    }