2017-03-11 28 views
3

我正在爲一個包含您需要按下的按鈕的學校項目的網站工作。當按下按鈕時,該按鈕從數據庫中獲取一個值,即'aantal',並添加1.當完成後,它將重新上傳到數據庫。進一步,您可以看到該孩子的實時號碼。問題是,這不適用於iOS 9或更低版本以及OSX Yosemite或更低版本。在Android和Windows上,它工作正常。Firebase數據庫網頁iOS/OSX

可重複使用的代碼;

這只是一個按鈕。如果你按下按鈕,它會在int上加1。這很奇怪,因爲它不適用於上面提到的操作系統。

<script src="https://www.gstatic.com/firebasejs/3.6.9/firebase.js"></script> 
<script language="JavaScript"> 
     // Initialize Firebase 
     var config = { 
      apiKey: //API KEY, 
      authDomain: //FIRBASE DOMAIN, 
      databaseURL: //DATABASE URL, 
      storageBucket: //STORAGE BUCKET, 
      messagingSenderId: //MESGSENDID 
     }; 
     firebase.initializeApp(config); 
     var number; 
     var database = firebase.database().ref().child('aantal'); 
     function buy() { 
      database.on('value', snap => number = snap.val()); 
      var count = parseInt(number, 10) + 1; 
      database.set(count); 
     } 
    </script> 

此代碼不起作用,請初始化自己的Firebase項目進行測試。 出於安全原因,我刪除了我的詳細信息。

+0

到底什麼不起作用?我猜測問題出在某些版本的Safari上,而不是iOS版本上? –

+0

沒有用。瀏覽器不添加1,它不顯示數據庫中的數字。 Safari瀏覽器有沒有解決方法? –

+0

你沒有在隱私瀏覽模式下使用Safari,對吧? –

回答

2

編輯 原來的Safari(9.1/iOS 9.3及以下版本)不支持箭頭功能。

database.on('value', snap => number = snap.val());更改爲database.on('value', function(snap) { number = snap.val()});修復了此問題。

嗯,我的意思是,該代碼不應該在任何地方工作。

function buy() { 
    database.on('value', snap => number = snap.val()); 
    var count = parseInt(number, 10) + 1; 
    database.set(count); 
} 

Firebase是異步的,並且您並未等待它實際從數據庫加載數字。

這應該工作。

function buy() { 
    database.on('value', snap => { 
     number = snap.val(); 
     var count = parseInt(number, 10) + 1; 
     database.set(count); 
    }); 
} 

我不知道這是否實際上是你遇到的問題,或者如果你只是寫了這個在你的榜樣。此外,增加值時,您應該使用事務。

function buy() { 
    database.transaction(function(value) { 
     if (value) { 
      value++; 
     } 
     return value; 
    }); 
} 
+0

我試過這段代碼,但這仍然無法在safari中使用。它在鉻壽,就像我的原代碼.. –

+0

你是如何測試這個?在實際設備上?它在iOS 8.4模擬器上正常工作。 –

+0

是的,我測試了這個代碼在macbook OSX el capitan在safari –