Ajax 中止http请求或Appcelerator
Am使用3.1.3.GA钛合金SDK和2.3.3 Android仿真器。我正在尝试使用Ti.Network.createHTTPClient()发布一个Ajax,在某个时候我需要中止它,现在我正在尝试这段代码,它没有得到工作,或者Ajax请求没有得到中止。我的代码 index.xmlAjax 中止http请求或Appcelerator,ajax,appcelerator,titanium-mobile,appcelerator-mobile,titanium-alloy,Ajax,Appcelerator,Titanium Mobile,Appcelerator Mobile,Titanium Alloy,Am使用3.1.3.GA钛合金SDK和2.3.3 Android仿真器。我正在尝试使用Ti.Network.createHTTPClient()发布一个Ajax,在某个时候我需要中止它,现在我正在尝试这段代码,它没有得到工作,或者Ajax请求没有得到中止。我的代码 index.xml <Alloy> <Window backgroundColor="white"> <Label onClick="sendAjax">Send</L
<Alloy>
<Window backgroundColor="white">
<Label onClick="sendAjax">Send</Label>
<Label onClick="cancelAjax">Cancel</Label>
</Window>
</Alloy>
是否可以中止ajax请求,否则必须在任何地方更改代码。有人使用appcelerator成功中止ajax请求吗?到目前为止,还没有解决方案:使用HttpClient对象中止ajax请求 我一直在尝试代码来找到解决方案,但我放弃了。当您中止请求并停止在代码中发送以下请求时,要检测到这一点并不是什么大问题,但HttpClient对象不会停止执行已经发送的请求 如果您可以等到下一个版本: 有人填写了一个关于这个问题的问题,并且已经解决了,也许也解决了你的问题 如果您不能: 通过谷歌搜索,我看到了他们指出解决方案的地方 使用,他们建议查看一些代码 如果您希望检测何时中止请求并停止发送以下请求: 根据onload属性: 必须在调用open之前设置 ondatastream和onreadystatechange属性也是如此 您的index.js代码应该重新组织,我建议您这样做:
Ti.Network.HTTPClient.UNSENT = 0;
Ti.Network.HTTPClient.OPENED = 1;
Ti.Network.HTTPClient.HEADERS_RECEIVED = 2;
Ti.Network.HTTPClient.LOADING = 3;
Ti.Network.HTTPClient.DONE = 4;
var ajaxCancel = false;
var xhr = createHTTPClient();
var url = ""; //MUST BE SET BEFORE USE
var params = ""; //MUST BE SET BEFORE USE
function createHTTPClient(){
var xhr = Ti.Network.createHTTPClient();
xhr.onerror = function(e){
Ti.API.info("-----------------------");
var error = e.error;
Ti.API.info("onerror:" + error);
};
xhr.onreadystatechange= function(e){
Ti.API.info("-----------------------");
Ti.API.info("[onreadystatechange]readyState:" + xhr.readyState);
};
xhr.onload= function(e){
Ti.API.info("-----------------------");
Ti.API.info("[onload]");
if (!ajaxCancel && this.readyState === Ti.Network.HTTPClient.DONE) {
Ti.API.info("[onload]success:");// + JSON.stringify(e));
}else{
Ti.API.info("[onload]readyState:" + xhr.readyState);
if(ajaxCancel){
Ti.API.info("[onload]abortCall:");// + JSON.stringify(e));
}else{
Ti.API.info("[onload]:");// + JSON.stringify(e));
}
}
};
xhr.ondatastream = function(e){
Ti.API.info("-----------------------");
if(ajaxCancel){
Ti.API.info("[ondatastream]abortCall:");// + JSON.stringify(e));
}else{
Ti.API.info("[ondatastream]:");// + JSON.stringify(e));
}
};
return xhr;
}
function sendAjax(){
if(ajaxCancel)
return;
Ti.API.info("----------CALL---------");
//xhr.open('GET', url);
xhr.open('POST', url);
Ti.API.info("Ti.Network.HTTPClient.UNSENT:" + Ti.Network.HTTPClient.UNSENT);
Ti.API.info("Ti.Network.HTTPClient.OPENED:" + Ti.Network.HTTPClient.OPENED);
Ti.API.info("Ti.Network.HTTPClient.HEADERS_RECEIVED:" + Ti.Network.HTTPClient.HEADERS_RECEIVED);
Ti.API.info("Ti.Network.HTTPClient.LOADING:" + Ti.Network.HTTPClient.LOADING);
Ti.API.info("Ti.Network.HTTPClient.DONE:" + Ti.Network.HTTPClient.DONE);
Ti.API.info("[sendAjax]before request");
xhr.send(params); //params not needed for a GET operation
Ti.API.info("[sendAjax]request send");
}
function cancelAjax(){
if(!xhr || ajaxCancel)
return;
Ti.API.info("-----------------------");
Ti.API.info("[cancelAjax]abort petition");
xhr.abort();
Ti.API.info("[cancelAjax]abort call executed");
ajaxCancel = true;
if(xhr.readyState === Ti.Network.HTTPClient.UNSENT ||
xhr.readyState === Ti.Network.HTTPClient.DONE){
//maybe it wasn't already sent or the cycle is completed
Ti.API.info("[cancelAjax]request not send or already done: " + xhr.readyState);
}else{
Ti.API.info("[cancelAjax]xhr.readyState:" + xhr.readyState);
}
}
function allowAjaxCalls(){
ajaxCancel = false;
}
在index.xml中,添加另一个标签/按钮,以控制在取消请求后是否允许发送请求:
<Alloy>
<Window backgroundColor="white">
<Button onClick="sendAjax">Send</Button>
<Button onClick="cancelAjax">Cancel</Button>
<Button onClick="allowAjaxCalls">AllowSend</Button>
</Window>
</Alloy>
发送
取消
允许
<Alloy>
<Window backgroundColor="white">
<Button onClick="sendAjax">Send</Button>
<Button onClick="cancelAjax">Cancel</Button>
<Button onClick="allowAjaxCalls">AllowSend</Button>
</Window>
</Alloy>