2013-07-01 36 views
2

有没有办法让请求和解放JavaScript和HTML来做他们自己的事情,让服务器完成它的任务直到它完成,在这一点上一个事件抓取JavaScript的控制权,将数据转储到指定的接收端并结束呼叫?如何向服务器发出请求并释放JavaScript以继续处理

我用这个方法调用的Python

function par_makeHttpObject() { 
    try { 
     return new XMLHttpRequest(); 
    } 
    catch (error) {} 
    try { 
     return new ActiveXObject("Msxml2.XMLHTTP"); 
    } 
    catch (error) {} 
    try { 
     return new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    catch (error) {} 
    throw new Error("Could not create HTTP request object."); 
} 

我叫它如下:

... 
var request = par_makeHttpObject(); 
request.open("POST", "../getFdList?Fds=allFds", false); 
request.send(); 
var dta = request.responseText.split("\n"); 
var cnt = 0; 
for (var x in dta) { 
    try {eval(dta[x]);} 
    catch (error) {alert("JS Error - check JS part of syntax!\n" + dta[x]);} 
} 
... 

的问题是,JavaScript的坐着等待对请求的答复,用户可以正在做别的事情。有些电话需要5分钟...

任何想法,将不胜感激。

DK

+3

jQuery的标签,但不使用jQuery。你可以很简单地使用'.ajax()'并利用'success:function(){}'来处理请求完成时的回调。它会让你继续你想要的。更何况,它正常化跨浏览器兼容性 – Ohgodwhy

+0

@Ohgodwhy你有这样的请求的任何示例代码? – DeKoss

+0

当然,关于整个页面的价值 - [$ .ajax()](http://api.jquery.com/jQuery.ajax/) – Ohgodwhy

回答

2

使用jQuery的ajax()功能,而不是滚动您自己的Ajax解决方案。 ajax()默认为异步请求,这样你就可以将它传递了一个名叫要求完成功能:

$.ajax({ 
    type: "POST", 
    url: "../getFdList?Fds=allFds" 
}).done(function(msg) { 
    alert("Response: " + msg); 
}); 

这样的话,你可以打电话ajax(),给它你的回调函数,与任何其他处理则需要进行去做。

jQuery的另外一个优点是,它非常好的跨浏览器而不需要任何努力。

+0

谢谢。这看起来与杰克有些不同,但我想我明白这是如何工作的。很有意思。 – DeKoss

2

是的,这实际上很容易。改变最后一个参数在公开征集“真”: (我把这个从W3Schools的(是的,我知道的网站坏名声,这只是一个例子))

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 && xmlhttp.status==200) 
{ 
      //THIS IS WHERE YOU GET THE SERVER RESPONSE 
    var response = xmlhttp.responseText; 
} 
} 
xmlhttp.open("GET","ajax_info.txt",true); 
xmlhttp.send(); 
} 
+0

啊! @Zachrip,那是什么选项呢?但是,我是否需要重新访问并检查呼叫是否准备好返回,或者是否必须准备一些响应对象来处理服务器回复事件? – DeKoss

+1

@DeKoss我从w3schools添加了一个更好的例子。 – Zachrip

+1

如果你阅读了这个问题,就没有必要去做规范化了,因为OP使用了一个已经在他的代码的第一行处理它的函数。 'function par_makeHttpObject(){'。他只需要readystatechange。[另外,关于为什么w3schools不好的强制性链接。](http://www.w3fools.com/) – Ohgodwhy

1

约最好的部分AJAX是在异步制作HTTP请求时继续处理其他内容的能力。

$.post('../getFdList?Fds=allFds', {}, function(response) { 
    var dta = response.split("\n"); 
    // ... 
}, 'text'); 
// continue doing something else here 

参见:$.post()

+0

哦! @杰克,我想我明白这一点。所以,这就像是一个随时准备接受回应的听众......我一定会尝试这个并让你知道。但我认为这应该工作...谢谢... – DeKoss

相关问题