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

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

從 PHP 獲取值到 Javascript - 將 AJAX 值返回到函數

從 PHP 獲取值到 Javascript - 將 AJAX 值返回到函數

PHP
米琪卡哇伊 2023-05-26 16:02:17
mineTime.php我正在嘗試創建一個函數,該函數將通過XMLHTTPRequest調用某個 PHP 文件 ( )并將其值返回給該函數。目前我遇到了麻煩,因為它不工作,要么什么都不返回,要么返回 undefined 或 null,我不知道該怎么做。我認為這可能與 onload 事件有關。mineTime.php<?php$miningTime = 3600;echo json_encode($miningTime);?>小黃人.jsfunction GetTime() {  var miningTime = null;  var xhr = new XMLHttpRequest();  xhr.onload = function() {    miningTime = this.responseText;  }  xhr.open("GET", "../php/mineTime.php", true);  xhr.send();  return miningTime;}window.onload = function () {    var timeToMine = parseInt(GetTime());    console.log(timeToMine); // outputs: NaN    var display = document.querySelector('#time'),        timer = new CountDownTimer(timeToMine),        timeObj = CountDownTimer.parse(timeToMine);        ...*code continues*提前致謝!
查看完整描述

2 回答

?
皈依舞

TA貢獻1851條經驗 獲得超3個贊

這是新程序員面臨的一個常見問題,尤其是在處理 AJAX 調用時。即使是更有經驗的程序員也很難掌握 AJAX 功能。重要的是要記住 AJAX 中的 A 代表什么,異步。這意味著主程序將繼續運行,而另一個副程序將工作以完成一些其他任務,通常稱為線程。在這種情況下,您試圖miningTime通過從該異步調用中獲取值來返回。因為該 AJAX 調用在與主程序不同的線程上運行,miningTime所以始終為空。


為了正確實現這一點,您需要實現所謂的回調函數?;卣{函數是在異步程序完成其正在執行的操作時運行的函數。


這是它的結構:


    function GetTime(callback) {

      var xhr = new XMLHttpRequest();

      xhr.onload = callback


      xhr.open("GET", "../php/mineTime.php", true);

      xhr.send();

    }


    function callbackFunction() {

      var timeToMine = parseInt(this.responseText);

      console.log(timeToMine); // outputs: NaN

      var display = document.querySelector('#time'),

      timer = new CountDownTimer(timeToMine),

      timeObj = CountDownTimer.parse(timeToMine);

            ...*code continues*

}


    window.onload = function () {

        var callback = callbackFunction

        GetTime(callback) 

}

請注意,在 Javascript 中,還有其他可能的處理方式。有些東西叫做Promisesas well as async/await。在我看來,這是最簡單、最普通的方法。


更新:因為你不能有一個帶有時間參數的函數,你可以做的是傳遞一個對該函數的引用。引用函數有點像復制函數并將其粘貼到其他地方,而調用函數實際上是在運行它。您可以通過括號辨別兩者。如果在函數名后加上左括號和右括號,則調用該函數,如果省略,則僅引用該函數。


查看完整回答
反對 回復 2023-05-26
?
哆啦的時光機

TA貢獻1779條經驗 獲得超6個贊

另一種方法是使用 Promise(IE 不支持)

function GetTime() {


? ? return new Promise( (resolve, reject) => {


? ? ? ? var miningTime = null;

? ? ? ? var xhr = new XMLHttpRequest();

? ? ? ? xhr.onload = function() {

? ? ? ? ? ? resolve(this.responseText);

? ? ? ? }


? ? ? ? xhr.open("GET", "../php/mineTime.php", true);

? ? ? ? xhr.send();


? ? })

}


window.onload = async function () {

? ? const data = await GetTime();

? ? var timeToMine = parseInt(data);

? ? console.log(timeToMine); // outputs: NaN

? ? var display = document.querySelector('#time'),

? ? ? ? timer = new CountDownTimer(timeToMine),

? ? ? ? timeObj = CountDownTimer.parse(timeToMine);

? ? ? ? ...*code continues*


查看完整回答
反對 回復 2023-05-26
  • 2 回答
  • 0 關注
  • 195 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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