javascript - 无论有没有 JSON.parse() 都无法将 JSON 响应设置为 var

标签 javascript json

<分区>

我正在设置一个小网站,除其他外(对于这个问题很重要)将您当前的位置数据保存在一个 var 中,它从 ipinfo API ( https://ipinfo.io/json ) 检索

我尝试使用 JSON.parse() 解决了我的网站在通常显示位置的 p-tag 处显示“未定义”的问题,然后在半秒后将我重定向到 url/[object%20Object]。通过解析,我得到以下错误 console.log:(请参阅下文)

JSON 响应可以在不保存的情况下使用而不会导致任何问题。要查看它的外观,请单击上面的 API 链接。

这是我的 JS 代码:

var location;

// called when the document is fully loaded
$(document).ready(function(){

    // gets your current location data and displays it
    $.get("https://ipinfo.io/json", function(response) {

        location = JSON.parse(response);
        console.log(location);
        document.querySelector('.location').innerHTML = location.city;

    });

这是 HTML:

<h4>You are playing from:</h4>
<div>
    <p class="location"></p>
    <p class="country"></p>
    <p class="region"></p>
</div>
<div class="row">
  <div class="column">
      <h3>Column 1</h3>
      <p id="city_a">
      </p>
  </div>
  <div class="column">
      <h3>Column 2</h3>
      <p id="city_b">
      </p>
  </div>

这是我得到的控制台错误:

VM102:1 Uncaught SyntaxError: Unexpected token o in JSON at position 1

at JSON.parse ()
at Object.success ((index):64)
at u (VM94 jquery-3.3.1.min.js:2)
at Object.fireWith [as resolveWith] (VM94 jquery-3.3.1.min.js:2)
at k (VM94 jquery-3.3.1.min.js:2)
at XMLHttpRequest. (VM94 jquery-3.3.1.min.js:2)

任何事情都会有所帮助 :) 提前致谢!

最佳答案

由于响应头的 Content-Type 类型,您的响应数据已经被解析为 JS 对象;你应该直接使用响应对象:

$.get("https://ipinfo.io/json", function (response) {
  document.querySelector('.location').innerHTML = response.city;
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<p class="location"></p>

您在尝试解析对象时看到的错误是由于 JSON.parse() 调用 object.toString(),它返回 “[对象对象]”:

const obj = {};

console.log(obj.toString()); // "[object Object]"
JSON.parse(obj); // Unexpected token o in JSON at position 1

至于您令人困惑的重定向,原因是全局 Window.location多变的。使用 let location; 会显示您正在设置一个现有变量,并抛出错误 “Uncaught SyntaxError: Identifier 'location' has already been declared”。使用不同的变量名可以解决问题。

let location; // Uncaught SyntaxError: Identifier 'location' has already been declared

location = "foo bar";

关于javascript - 无论有没有 JSON.parse() 都无法将 JSON 响应设置为 var,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56719581/

相关文章:

javascript - HTML5 Canvas lineWidth 被忽略

javascript - 路由解析器在没有订阅的情况下不会触发可观察的

javascript - 如何创建弹出窗口来提交表单数据?

json - 如何使用 Azure CLI 筛选 JMESPath 中的元素数组

android - Moshi 期望 BEGIN_OBJECT 但在路径 $ 处是 BEGIN_ARRAY

javascript - 无法执行ajax post操作

javascript - 如何在 javascript 中获取给定的月份开始日期和结束日期

javascript - 使用 event.target 更改点击时的 iframe src attr

javascript - 带有 Express 的 Node.js - 返回指向 .CSV 文件的链接而不是下载它

mysql - 谷歌地图标记 : directly from database, xml 或 json