【问题标题】:JSON parse not working properly - JavascriptJSON解析无法正常工作 - Javascript
【发布时间】:2021-03-20 10:35:50
【问题描述】:

我在解析数据时遇到了一点麻烦。当我在 if 语句中添加 JSON.parse(this.responseText) 和 this.status == 200 时,我的代码似乎不起作用。当我把它们取下来时,它就起作用了,我得到了成功的警报。不知道我做错了什么,或者我做错了,大声笑任何帮助将不胜感激!我正在使用 Yelp API。

这是我的代码:

    xhr.withCredentials = true;
    
    xhr.onreadystatechange = function() {
      if(this.readyState == 4) {
        console.log(this.responseText);
        //let data = JSON.parse(this.responseText);
        alert("Success!");
        //display(data);
      }
    };
    
    xhr.open("GET", "https://api.yelp.com/v3/businesses/search?term=" + resname.value + "&location=" + locationname.value+"&limit=5");
    xhr.setRequestHeader("Authorization", "Bearer <MY API KEY WILL BE HERE>");
    xhr.send();

解析时出错:

Unexpected end of JSON input
    at JSON.parse (<anonymous>)
    at XMLHttpRequest.xhr.onreadystatechange 

【问题讨论】:

  • 你说它不起作用意味着它是否给出任何错误
  • 这是我得到的错误:index.html:1 Access to XMLHttpRequest at 'api.yelp.com/v3/businesses/search?location=NYC' from origin '127.0.0.1:5500'已被 CORS 策略阻止:对预检请求的响应没有通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。 api.yelp.com/v3/businesses/search?location=NYC:1 当我取下 json.parse 时收到成功警报(这是我添加 JSON.parse 时出现的错误 JSON.parse 中 JSON 输入的意外结束() 在 XMLHttpRequest.xhr.onreadystatechange

标签: javascript xmlhttprequest jsonparser yelp-fusion-api


【解决方案1】:

似乎已经开发了 Fusion API 用于后端使用,因为目前没有“批准”的方法 通过 JavaScript 使用 Fusion。因此,来自前端的 Ajax 请求 导致 CORS(跨源资源共享违规)问题,因为两者都没有 Fusion 支持 CORS 标头和 JSONP 解决方法(至少不支持 在撰写本文时)。here

How do I resolve the CORS error in Yelp API call?和你的错误一样

编辑: 试试这个吧:

var queryURL = https://cors-anywhere.herokuapp.com/https://api.yelp.com/v3/businesses/search?term=food&location=New York City&limit=5;
var mykey = "";

        $.ajax({
            url: queryURL,
            method: "GET",
            headers: {
                "accept": "application/json",
                "x-requested-with": "xmlhttprequest",
                "Access-Control-Allow-Origin":"*",
                "Authorization": `Bearer ${mykey}`
             },
            success: function(result){
                console.log(result);
            }
         });

【讨论】:

  • 我明白了。我尝试在邮递员上运行 API,它在那里工作。我会试试你提供的链接。谢谢!
  • @lxx2015 如果它有助于解决您的问题,请不要忘记投票。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-25
  • 1970-01-01
  • 2019-03-21
  • 1970-01-01
相关资源
最近更新 更多