亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

首先嘗試保護文件不被訪問

首先嘗試保護文件不被訪問

繁華開滿天機 2024-01-03 14:37:51
function downloadUrl(url, callback) {    Transition();    var request = window.ActiveXObject ?        new ActiveXObject('Microsoft.XMLHTTP') :        new XMLHttpRequest;    request.onreadystatechange = function() {        if (request.readyState == 4) {            request.onreadystatechange = doNothing;            callback(request, request.status);        }    };    request.open('GET', url, true);    request.send(null);    Transition();}function Transition() {    var xmlhttp = window.ActiveXObject ?        new ActiveXObject('Microsoft.XMLHTTP') :        new XMLHttpRequest;    xmlhttp.onreadystatechange = function() {        if (xmlhttp.readyState == 4) {            xmlhttp.onreadystatechange = doNothing;            callback(xmlhttp, xmlhttp.status);        }    };    xmlhttp.open("GET", "transition.php", true);    xmlhttp.send();}啊,是的,我正在嘗試使用 jQuery 并打開會話變量,并在執行另一個 jQuery 函數后使用上述方法關閉該會話變量。transition.php是打開和關閉變量的文件,另一個 jQuery 函數downloadUrl只是下載 XML 格式文件??傊矣幸粋€.php文件需要保持打開狀態足夠長的時間才能訪問其中的數據,然后立即關閉。
查看完整描述

1 回答

?
慕姐4208626

TA貢獻1852條經驗 獲得超7個贊

更新:onreadystatechange更正了和的一些措辭readyState。

你打開或關閉東西的技巧是一個好主意,盡管我不確定它是否有效或安全。無論如何,您所顯示的代碼的直接問題是它沒有考慮您正在使用異步請求的事實。

您的代碼按照編寫的順序運行,但異步請求不會阻止執行,因此第二個XMLHttpRequesttourl幾乎立即觸發,并且早在第一個Transition()完成之前就觸發了。

如果您需要事情按順序發生,則需要從請求onreadystatechange事件處理程序調用后續步驟,該事件處理程序會在請求狀態更改時觸發。代碼已經測試了readyState 4,這意味著請求已完成。因此,請求完成后,調用的代碼就會運行。

我不確定你的一些代碼在做什么,也許它是在上下文之外復制的(例如你的callback, and是什么doNothing?)。

這是一個基于您的代碼的工作 JSFiddle,對所有 3 個請求使用虛擬 URL。我已經包含了一堆日志記錄,打開您的開發控制臺以查看事件啟動、運行和完成的順序。

這個想法是將回調傳遞給第一個Transition,該回調將在請求完成后被觸發:

function downloadUrl() {
    Transition(foo);
}

Transition將回調作為參數,并在完成時觸發它:

function Transition(callback) {


    // ... your code ... 


    xmlhttp.onreadystatechange = function() {

        if (xmlhttp.readyState == 4) {

            if (callback) {

                callback();

            }

        }

    };


    // ... your code


}

這foo()是一個實際下載 的函數url,基本上是您所擁有的所有內容downloadUrl(),但不調用Transition.


完成后foo(),您需要Transition再次調用,但這次我們不想在完成后觸發任何內容,因此我們通過false,這Transition將測試并跳過嘗試執行。


我寫得很快,感覺有點笨拙,您可能可以稍微修改一下以使其更整潔,但它演示了使用事件處理程序通過異步請求順序執行操作的基本思想。


查看完整回答
反對 回復 2024-01-03
  • 1 回答
  • 0 關注
  • 132 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號