Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ajax 中止http请求或Appcelerator_Ajax_Appcelerator_Titanium Mobile_Appcelerator Mobile_Titanium Alloy - Fatal编程技术网

Ajax 中止http请求或Appcelerator

Ajax 中止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

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</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>