2017-03-11 30 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 –