function AJAX(url,data)
{
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4)
{
return xmlhttp.responseText;
}
}
xmlhttp.open("POST",url,true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send(data);
}
var a = AJAX('log.php','username=Leonard&password=asjdklaslkjdalskjdlaksjda');
当函数返回时,它会给我" undefined"。
答案 0 :(得分:0)
你的函数是异步的 - 它不会在返回之前等待AJAX调用完成,所以没有结果可以返回。
试试这个:
function AJAX(url, data, callback, ctx)
{
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState == 4)
{
callback.call(ctx, xmlhttp.responseText);
}
}
xmlhttp.open("POST",url,true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send(data);
}
注意你现在必须提供一个“回调函数”,它将在AJAX完成时调用:
AJAX('log.php','username=Leonard&password=asjdklaslkjdalskjdlaksjda',
function(result) {
// do stuff with result
}
);
编辑我添加的ctx
参数是可选的 - 这样您就可以设置调用回调时的this
。如果回调是对象的方法而不是独立的函数,那么(没有双关语)将是有用的。
答案 1 :(得分:0)
当您returns xmlhttp.responseText
时,您将返回onreadystatechange
财产。不是很有用,是吗?
相反,请使用异步行为执行以下操作:
function AJAX( url, data, callback ) {
// Your stuff
xmlhttp.onreadystatechange = function() {
if ( xmlhttp.readyState === 4 ) {
callback( xmlhttp.responseText )
}
}
// Your other stuff
}
然后,您可以像:
一样使用它AJAX( url, data, function( responseText ) {
// use responseText there
} )