我在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数组我得不到结果, 这是为什么?感谢
答案 0 :(得分:2)
这是因为return tmp
在onSuccess
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)
}
有关此功能的更多信息
答案 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;
}
});
}