1

我一直在不同的浏览器上测试我的 JS 代码,但它似乎不适用于其中一些浏览器和移动设备。

JS

function req1() {
  fetch('https://jsonplaceholder.typicode.com/posts/1')
    .then(response => response.json())
    .then(json => {
      var title = json.title;
      var body = json.body; 
      document.getElementById("newsTitle").innerHTML = title;
      document.getElementById("newsContent").innerHTML = body;
      document.getElementById("newsContent2").innerHTML = body;
    });
}
req1();

通过阅读这个问题,我了解到问题可能与 '=>' 有关,因为它是 ES6 元素,并非所有浏览器都支持它。但正如您在这里看到的,这似乎是获取这些 json 数据的方法:https ://jsonplaceholder.typicode.com/

有没有办法避免在这个函数中使用 '=>' 来使它在所有浏览器上都能工作?

例如,我在 Safari 9 上遇到的错误是:

在此处输入图像描述

我尝试了一些解决方案,但现在出现此错误:

在此处输入图像描述

帖子还没有打印,有什么想法吗?

4

5 回答 5

2

只需使用普通函数语法而不是 ES6 箭头语法:

function req1() {
  fetch('https://jsonplaceholder.typicode.com/posts/1')
    .then(function (res) {return res.json()})
    .then(function (json) {
      var title = json.title;
      var body = json.body; 
      document.getElementById("newsTitle").innerHTML = title;
      document.getElementById("newsContent").innerHTML = body;
      document.getElementById("newsContent2").innerHTML = body;
    });
}
req1();

大多数不支持 ES6 箭头语法的浏览器不太可能支持 Fetch API。对于那些我建议使用另一种形式的 HTTP 请求,或者使用 Polyfill,比如GitHub 的

于 2018-05-07T13:50:56.390 回答
1

使用普通函数而不是 lambda:

"use strict";

function req1() {
    fetch('https://jsonplaceholder.typicode.com/posts/1').then(function(response){
        return response.json();
    }).then(function(json){
        var title = json.title;
        var body = json.body;
        document.getElementById("newsTitle").innerHTML = title;
        document.getElementById("newsContent").innerHTML = body;
        document.getElementById("newsContent2").innerHTML = body;
    });
}
req1();

写吧

.then(function(json){

代替

.then(response => response.json())

另外,如果你不确定脚本中的 ES6 语法,你可以使用类似babel的东西:

https://babeljs.io/repl/

于 2018-05-07T13:50:25.050 回答
1

您需要使用 fetch polyfill 和旧函数语法,而不是 es6 的新箭头函数语法。

function req1() {
  fetch('https://jsonplaceholder.typicode.com/posts/1')
    .then(function (res) {return res.json()})
    .then(function (json) {
      var title = json.title;
      var body = json.body; 
      document.getElementById("newsTitle").innerHTML = title;
      document.getElementById("newsContent").innerHTML = body;
    });
}
req1();
<script src="https://cdnjs.cloudflare.com/ajax/libs/fetch/2.0.4/fetch.js"></script>
<div id="newsTitle"></div>
<div id="newsContent"> </div>

浏览器对 Fetch API polyfill 的支持

  • 铬合金
  • 火狐
  • Safari 6.1+
  • 互联网浏览器 10+
于 2018-05-07T14:09:31.160 回答
0

更改以下行

then(response => response.json())

.then(function(response){ response.json() })

.then(json => {

.then(function (json) {

完整代码:

function req1() {
  fetch('https://jsonplaceholder.typicode.com/posts/1')
   .then(function(response){ response.json()})
   .then(function (json){
     var title = json.title;
     var body = json.body; 
     document.getElementById("newsTitle").innerHTML = title;
     document.getElementById("newsContent").innerHTML = body;
     document.getElementById("newsContent2").innerHTML = body;
   });
}
req1();
于 2018-05-07T13:50:08.163 回答
-1

为什么不使用简单的请求

 var xhReq = new XMLHttpRequest();
 xhReq.open("GET", "https://jsonplaceholder.typicode.com/posts/1", false);
 xhReq.send(null);
 var serverResponse = xhReq.responseText;
 var json = JSON.parse(serverResponse);
 alert(json.title);
于 2018-05-07T13:55:05.370 回答