SyntaxError: Mã thông báo bất ngờ <trong JSON ở vị trí 0


196

Trong thành phần ứng dụng React xử lý các nguồn cấp nội dung giống như Facebook, tôi gặp phải một lỗi:

Feed.js: 94 "trình phân tích cú pháp" không xác định "Cú pháp: Mã thông báo bất ngờ <trong JSON ở vị trí 0

Tôi đã gặp một lỗi tương tự hóa ra là lỗi chính tả trong HTML trong chức năng kết xuất, nhưng dường như đó không phải là trường hợp ở đây.

Khó hiểu hơn, tôi đã chuyển mã trở lại phiên bản cũ hơn, đã biết và tôi vẫn gặp lỗi.

Feed.js:

import React from 'react';

var ThreadForm = React.createClass({
  getInitialState: function () {
    return {author: '', 
            text: '', 
            included: '',
            victim: ''
            }
  },
  handleAuthorChange: function (e) {
    this.setState({author: e.target.value})
  },
  handleTextChange: function (e) {
    this.setState({text: e.target.value})
  },
  handleIncludedChange: function (e) {
    this.setState({included: e.target.value})
  },
  handleVictimChange: function (e) {
    this.setState({victim: e.target.value})
  },
  handleSubmit: function (e) {
    e.preventDefault()
    var author = this.state.author.trim()
    var text = this.state.text.trim()
    var included = this.state.included.trim()
    var victim = this.state.victim.trim()
    if (!text || !author || !included || !victim) {
      return
    }
    this.props.onThreadSubmit({author: author, 
                                text: text, 
                                included: included,
                                victim: victim
                              })
    this.setState({author: '', 
                  text: '', 
                  included: '',
                  victim: ''
                  })
  },
  render: function () {
    return (
    <form className="threadForm" onSubmit={this.handleSubmit}>
      <input
        type="text"
        placeholder="Your name"
        value={this.state.author}
        onChange={this.handleAuthorChange} />
      <input
        type="text"
        placeholder="Say something..."
        value={this.state.text}
        onChange={this.handleTextChange} />
      <input
        type="text"
        placeholder="Name your victim"
        value={this.state.victim}
        onChange={this.handleVictimChange} />
      <input
        type="text"
        placeholder="Who can see?"
        value={this.state.included}
        onChange={this.handleIncludedChange} />
      <input type="submit" value="Post" />
    </form>
    )
  }
})

var ThreadsBox = React.createClass({
  loadThreadsFromServer: function () {
    $.ajax({
      url: this.props.url,
      dataType: 'json',
      cache: false,
      success: function (data) {
        this.setState({data: data})
      }.bind(this),
      error: function (xhr, status, err) {
        console.error(this.props.url, status, err.toString())
      }.bind(this)
    })
  },
  handleThreadSubmit: function (thread) {
    var threads = this.state.data
    var newThreads = threads.concat([thread])
    this.setState({data: newThreads})
    $.ajax({
      url: this.props.url,
      dataType: 'json',
      type: 'POST',
      data: thread,
      success: function (data) {
        this.setState({data: data})
      }.bind(this),
      error: function (xhr, status, err) {
        this.setState({data: threads})
        console.error(this.props.url, status, err.toString())
      }.bind(this)
    })
  },
  getInitialState: function () {
    return {data: []}
  },
  componentDidMount: function () {
    this.loadThreadsFromServer()
    setInterval(this.loadThreadsFromServer, this.props.pollInterval)
  },
  render: function () {
    return (
    <div className="threadsBox">
      <h1>Feed</h1>
      <div>
        <ThreadForm onThreadSubmit={this.handleThreadSubmit} />
      </div>
    </div>
    )
  }
})

module.exports = ThreadsBox

Trong các công cụ dành cho nhà phát triển Chrome, lỗi dường như xuất phát từ chức năng này:

 loadThreadsFromServer: function loadThreadsFromServer() {
    $.ajax({
      url: this.props.url,
      dataType: 'json',
      cache: false,
      success: function (data) {
        this.setState({ data: data });
      }.bind(this),
      error: function (xhr, status, err) {
        console.error(this.props.url, status, err.toString());
      }.bind(this)
    });
  },

với dòng console.error(this.props.url, status, err.toString()gạch chân.

Vì có vẻ như lỗi này có liên quan đến việc lấy dữ liệu JSON từ máy chủ, tôi đã thử bắt đầu từ một db trống, nhưng lỗi vẫn còn. Lỗi dường như được gọi trong một vòng lặp vô hạn có lẽ là do React liên tục cố gắng kết nối với máy chủ và cuối cùng làm hỏng trình duyệt.

BIÊN TẬP:

Tôi đã kiểm tra phản hồi của máy chủ với các công cụ phát triển Chrome và ứng dụng khách Chrome REST và dữ liệu có vẻ là JSON thích hợp.

EDIT 2:

Có vẻ như mặc dù điểm cuối API dự định thực sự trả về dữ liệu và định dạng JSON chính xác, React đang bỏ phiếu http://localhost:3000/?_=1463499798727thay vì dự kiến http://localhost:3001/api/threads.

Tôi đang chạy một máy chủ tải lại webpack trên cổng 3000 với ứng dụng express chạy trên cổng 3001 để trả về dữ liệu phụ trợ. Điều gây nản lòng ở đây là điều này đã hoạt động chính xác trong lần cuối cùng tôi làm việc với nó và không thể tìm thấy những gì tôi có thể đã thay đổi để phá vỡ nó.


11
Điều đó cho thấy rằng "JSON" của bạn thực sự là HTML. Nhìn vào dữ liệu bạn đang nhận được từ máy chủ.
Quentin

2
Đây là lỗi bạn gặp phải nếu bạn làm điều gì đó như JSON.parse("<foo>")- một chuỗi JSON (mà bạn mong đợi dataType: 'json') không thể bắt đầu bằng <.
apsillers 17/05/2016

Như @quantin đã nói, nó có thể là html, có thể là lỗi nào đó, hãy thử cùng một url với một số khách hàng còn lại
maurycy

như tôi đã đề cập, tôi đã thử nó với một db trống (trả về đơn giản là []) và nó vẫn đưa ra cùng một lỗi
Cameron Sima

Bạn rất có thể cần phải yêu cầu API proxy tùy thuộc vào NODE_ENV. Xem điều này: github.com/facebookincubator/create-react-app/blob/master/ mẹo
Kevin Scos

Câu trả lời:


147

Từ ngữ của thông báo lỗi tương ứng với những gì bạn nhận được từ Google Chrome khi bạn chạy JSON.parse('<...'). Tôi biết bạn nói rằng máy chủ đang cài đặt Content-Type:application/json, nhưng tôi tin rằng cơ quan phản hồi thực sự là HTML.

Feed.js:94 undefined "parsererror" "SyntaxError: Unexpected token < in JSON at position 0"

với dòng console.error(this.props.url, status, err.toString())gạch chân.

Cái errthực sự được ném vào bên trong jQuery, và được chuyển cho bạn như một biến số err. Lý do dòng đó được gạch chân đơn giản là vì đó là nơi bạn đang đăng nhập nó.

Tôi sẽ đề nghị bạn thêm vào đăng nhập của bạn. Nhìn vào các thuộc tính thực tế xhr(XMLHttpRequest) để tìm hiểu thêm về phản hồi. Hãy thử thêm console.warn(xhr.responseText)và rất có thể bạn sẽ thấy HTML đang được nhận.


3
Cảm ơn, tôi đã làm điều này và bạn đúng - phản ứng là bỏ phiếu sai url và đang trả lại nội dung của index.html. Tôi không thể tìm hiểu tại sao.
Cameron Sima

8
Cảm ơn cho tuyên bố gỡ lỗi bổ sung, mặc dù tôi cần sử dụng console.warn(jqxhr.responseText). Điều đó rất hữu ích trong việc chẩn đoán vấn đề của tôi.
user2441511

@ Mimi314159, console.log, console.warnconsole.errortất cả sẽ ghi vào Bảng điều khiển của bạn. Tuy nhiên, Bảng điều khiển thường sẽ cung cấp các tùy chọn Bộ lọc ghi nhật ký, vì vậy hãy chắc chắn rằng các tùy chọn này được bật hoặc tắt tùy ý.
Cánh đồng Bryan

1
Trong trường hợp của tôi, một lỗi PHP đã xảy ra khiến máy chủ trả về HTML thay vì JSON hợp lệ.
Derek S

51

Bạn đang nhận lại HTML (hoặc XML) từ máy chủ, nhưng điều đó dataType: jsonđang bảo jQuery phân tích cú pháp dưới dạng JSON. Kiểm tra tab "Mạng" trong các công cụ phát triển của Chrome để xem nội dung phản hồi của máy chủ.


Tôi đã kiểm tra, và nó dường như được trả lại đúng định dạng json. Đây là tiêu đề phản hồi: Access-Control-allow-Origin: * Cache-Control: no-cache Content-length: 2487 Loại nội dung: application / json; charset = utf-8 Ngày: Thứ ba, 17 tháng 5 năm 2016 15:34:00 GMT ETag: W / "9b7-yi1 / G0RRpr0DlOVc9u7cMw" X-Powered-By: Express
Cameron Sima

1
@AVI Tôi tin rằng bạn phải chỉ định loại MIME trong lớp tài nguyên của bạn. (ví dụ)@Produces(MediaType.APPLICATION_JSON)
DJ2

10

Điều này cuối cùng đã trở thành một vấn đề quyền cho tôi. Tôi đã cố gắng truy cập một url mà tôi không có quyền với cancan, vì vậy url đã được chuyển sang users/sign_in. url được chuyển hướng trả lời html, không phải json. Ký tự đầu tiên trong phản hồi html là <.


và khi bạn nhận được HTML dưới dạng phản hồi .. làm thế nào bạn có thể chuyển hướng đến html này? Cảm ơn bạn.
JuMoGar

1
Tôi đã có cùng, mặc dù trong ASP.NET MVC. Đối với các .NETters khác, tôi đã quên trang trí hành động của mình bằng thuộc tính [AllowAnonymous] để khung công tác đang cố gắng trả lại cho tôi lỗi trái phép trong HTML đã làm hỏng cuộc gọi AJAX của tôi.
Jason Marsell

8

Tôi đã gặp lỗi này "SyntaxError: Mã thông báo bất ngờ m trong JSON tại vị trí", trong đó mã thông báo 'm' có thể là bất kỳ ký tự nào khác.

Hóa ra tôi đã bỏ lỡ một trong hai dấu ngoặc kép trong đối tượng JSON khi tôi đang sử dụng RESTconsole cho bài kiểm tra DB, vì {"name:" math "}, câu đúng phải là {" name ":" math "}

Tôi đã mất rất nhiều nỗ lực để tìm ra sai lầm vụng về này. Tôi sợ những người khác sẽ chạy vào bummers tương tự.


5

Trong trường hợp của tôi, tôi đã nhận được gói webpack đang chạy này và hóa ra đó là một số tham nhũng ở đâu đó trong thư mục node_modules cục bộ.

rm -rf node_modules
npm install

... Là đủ để làm cho nó hoạt động trở lại.


1
cùng với điều này, tôi đã thử loại bỏ gói-lock.json. Sau đó, nó làm việc cho tôi.
Mahesh

3

Trường hợp của tôi, lỗi là do tôi không gán giá trị trả về của mình cho một biến. Điều sau đây gây ra thông báo lỗi:

return new JavaScriptSerializer().Serialize("hello");

Tôi đã đổi nó thành:

string H = "hello";
return new JavaScriptSerializer().Serialize(H);

Không có biến JSON thì không thể định dạng đúng dữ liệu.


3

Lỗi này xảy ra khi bạn xác định phản hồi là application/jsonvà bạn đang nhận HTML dưới dạng phản hồi. Về cơ bản, điều này xảy ra khi bạn đang viết tập lệnh phía máy chủ cho url cụ thể với phản hồi của JSON nhưng định dạng lỗi là bằng HTML.



2

tôi đã phải đối mặt với cùng một vấn đề
tôi đã xóa dataType: 'json' khỏi phương thức $ .ajax


1

Tôi đã có thông báo lỗi tương tự sau một hướng dẫn. Vấn đề của chúng tôi dường như là 'url: this.props.url' trong cuộc gọi ajax. Trong React.DOM khi bạn đang tạo phần tử của mình, của tôi trông như thế này.

ReactDOM.render(
    <CommentBox data="/api/comments" pollInterval={2000}/>,
    document.getElementById('content')
);

Chà, CommentBox này không có url trong các đạo cụ của nó, chỉ là dữ liệu. Khi tôi chuyển đổi url: this.props.url-> url: this.props.data, nó đã thực hiện cuộc gọi đúng đến máy chủ và tôi đã lấy lại được dữ liệu dự kiến.

Tôi hy vọng nó sẽ giúp.


1

Vấn đề của tôi là tôi đã lấy lại được dữ liệu stringkhông ở định dạng JSON thích hợp, lúc đó tôi đang cố phân tích nó. simple example: JSON.parse('{hello there}')sẽ đưa ra một lỗi tại h. Trong trường hợp của tôi, url gọi lại đã trả về một ký tự không cần thiết trước các đối tượng: employee_names([{"name":....và đã gặp lỗi tại e ở mức 0. URL gọi lại của tôi có vấn đề mà khi được sửa, chỉ trả về các đối tượng.


1

Trong trường hợp của tôi, đối với trang web Angular 2/4 được lưu trữ trên Azure, lệnh gọi API của tôi tới mySite / api / ... đã chuyển hướng do sự cố định tuyến mySite. Vì vậy, nó đã trả về HTML từ trang được chuyển hướng thay vì JSON api. Tôi đã thêm một loại trừ trong tệp web.config cho đường dẫn api.

Tôi đã không gặp phải lỗi này khi phát triển cục bộ vì Trang web và API nằm trên các cổng khác nhau. Có lẽ có một cách tốt hơn để làm điều này ... nhưng nó đã làm việc.

<?xml version="1.0" encoding="UTF-8"?>

<configuration>
    <system.webServer>
        <rewrite>
        <rules>
        <clear />

        <!-- ignore static files -->
        <rule name="AngularJS Conditions" stopProcessing="true">
        <match url="(app/.*|css/.*|fonts/.*|assets/.*|images/.*|js/.*|api/.*)" />
        <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
        <action type="None" />
        </rule>

        <!--remaining all other url's point to index.html file -->
        <rule name="AngularJS Wildcard" enabled="true">
        <match url="(.*)" />
        <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
        <action type="Rewrite" url="index.html" />
        </rule>

        </rules>
        </rewrite>
    </system.webServer>
</configuration>

1

Điều này có thể cũ. Nhưng, nó chỉ xảy ra ở góc, loại nội dung cho yêu cầu và phản hồi khác nhau trong mã của tôi. Vì vậy, hãy kiểm tra các tiêu đề cho,

 let headers = new Headers({
        'Content-Type': 'application/json',
        **Accept**: 'application/json'
    });

trong các phản ứng axios

axios({
  method:'get',
  url:'http://  ',
 headers: {
         'Content-Type': 'application/json',
        Accept: 'application/json'
    },
  responseType:'json'
})

jQuery Ajax:

 $.ajax({
      url: this.props.url,
      dataType: 'json',
**headers: { 
          'Content-Type': 'application/json',
        Accept: 'application/json'
    },**
      cache: false,
      success: function (data) {
        this.setState({ data: data });
      }.bind(this),
      error: function (xhr, status, err) {
        console.error(this.props.url, status, err.toString());
      }.bind(this)
    });
  },

0

Sau khi dành nhiều thời gian cho việc này, tôi phát hiện ra rằng trong trường hợp của mình, sự cố xảy ra là "trang chủ" được xác định trên tệp pack.json khiến ứng dụng của tôi không hoạt động trên firebase (lỗi tương tự 'token'). Tôi đã tạo ứng dụng phản ứng của mình bằng ứng dụng tạo phản ứng, sau đó tôi sử dụng hướng dẫn căn cứ hỏa lực trên tệp READ.me để triển khai lên các trang github, nhận ra tôi phải làm thêm để bộ định tuyến hoạt động và chuyển sang căn cứ hỏa. hướng dẫn github đã thêm khóa trang chủ trên pack.json và gây ra sự cố triển khai.


0

Protip: Kiểm tra json trên máy chủ Node.js cục bộ? Hãy chắc chắn rằng bạn chưa có thứ gì đó định tuyến đến đường dẫn đó

'/:url(app|assets|stuff|etc)';

0

Ở mức độ chung, lỗi này xảy ra khi một đối tượng JSON được phân tích cú pháp có lỗi cú pháp trong đó. Hãy nghĩ về một cái gì đó như thế này, trong đó thuộc tính thư chứa dấu ngoặc kép không được giải thích:

{
    "data": [{
        "code": "1",
        "message": "This message has "unescaped" quotes, which is a JSON syntax error."
    }]
}

Nếu bạn có JSON trong ứng dụng của mình ở đâu đó thì tốt nhất bạn nên chạy nó qua JSONLint để xác minh rằng nó không có lỗi cú pháp. Thông thường, đây không phải là trường hợp mặc dù theo kinh nghiệm của tôi, thường thì JSON được trả về từ một API là thủ phạm.

Khi yêu cầu XHR được thực hiện cho API HTTP trả về phản hồi có Content-Type:application/json; charset=UTF-8tiêu đề chứa JSON không hợp lệ trong phần phản hồi, bạn sẽ thấy lỗi này.

Nếu bộ điều khiển API phía máy chủ xử lý không đúng lỗi cú pháp và nó được in ra như một phần của phản hồi, điều đó sẽ phá vỡ cấu trúc của JSON được trả về. Một ví dụ điển hình cho điều này sẽ là một phản hồi API có chứa Cảnh báo hoặc Thông báo PHP trong phần thân phản hồi:

<b>Notice</b>:  Undefined variable: something in <b>/path/to/some-api-controller.php</b> on line <b>99</b><br />
{
    "success": false,
    "data": [{ ... }]
}

95% thời gian này là nguồn gốc của vấn đề đối với tôi, và mặc dù nó phần nào được giải quyết ở đây trong các phản hồi khác tôi không cảm thấy nó được mô tả rõ ràng. Hy vọng rằng điều này sẽ giúp ích, nếu bạn đang tìm kiếm một cách thuận tiện để theo dõi phản hồi API nào có lỗi cú pháp JSON mà tôi đã viết một mô-đun Angular cho điều đó .

Đây là mô-đun:

/**
 * Track Incomplete XHR Requests
 * 
 * Extend httpInterceptor to track XHR completions and keep a queue 
 * of our HTTP requests in order to find if any are incomplete or 
 * never finish, usually this is the source  of the issue if it's 
 * XHR related
 */
angular.module( "xhrErrorTracking", [
        'ng',
        'ngResource'
    ] )
    .factory( 'xhrErrorTracking', [ '$q', function( $q ) {
        var currentResponse = false;

        return {
            response: function( response ) {
                currentResponse = response;
                return response || $q.when( response );
            },
            responseError: function( rejection ) {
                var requestDesc = currentResponse.config.method + ' ' + currentResponse.config.url;
                if ( currentResponse.config.params ) requestDesc += ' ' + JSON.stringify( currentResponse.config.params );

                console.warn( 'JSON Errors Found in XHR Response: ' + requestDesc, currentResponse );

                return $q.reject( rejection );
            }
        };
    } ] )
    .config( [ '$httpProvider', function( $httpProvider ) {
        $httpProvider.interceptors.push( 'xhrErrorTracking' );
    } ] );

Thông tin chi tiết có thể được tìm thấy trong bài viết blog được tham chiếu ở trên, tôi đã không đăng tất cả mọi thứ được tìm thấy ở đây vì nó có thể không liên quan.


0

Đối với tôi, điều này đã xảy ra khi một trong các thuộc tính trên đối tượng tôi đang trả về khi JSON ném một ngoại lệ.

public Dictionary<string, int> Clients { get; set; }
public int CRCount
{
    get
    {
        var count = 0;
        //throws when Clients is null
        foreach (var c in Clients) {
            count += c.Value;
        }
        return count;
    }
}

Thêm một kiểm tra null, sửa nó cho tôi:

public Dictionary<string, int> Clients { get; set; }
public int CRCount
{
    get
    {
        var count = 0;
        if (Clients != null) {
            foreach (var c in Clients) {
                count += c.Value;
            }
        }
        return count;
    }
}

0

chỉ cần một cái gì đó cơ bản để kiểm tra, đảm bảo bạn không có bất cứ điều gì nhận xét trong tệp json

//comments here will not be parsed and throw error

0

Chỉ cần thêm vào câu trả lời, nó cũng xảy ra khi phản hồi API của bạn bao gồm

<?php{username: 'Some'}

đó có thể là một trường hợp khi phụ trợ của bạn đang sử dụng PHP.


0

Trong python, bạn có thể sử dụng json.Dump (str) trước khi gửi kết quả đến mẫu html. với chuỗi lệnh này chuyển đổi sang định dạng json chính xác và gửi đến mẫu html. Sau khi gửi kết quả này đến JSON.parse (kết quả), đây là phản hồi chính xác và bạn có thể sử dụng kết quả này.


0

Đối với một số người, điều này có thể giúp các bạn: Tôi đã có trải nghiệm tương tự với API REST của Wordpress. Tôi thậm chí đã sử dụng Postman để kiểm tra xem tôi có đúng tuyến đường hoặc điểm cuối không. Sau đó tôi phát hiện ra rằng tôi vô tình đặt một "tiếng vang" bên trong kịch bản của mình - hook:

Gỡ lỗi và kiểm tra bàn điều khiển của bạn

Nguyên nhân lỗi

Về cơ bản, điều này có nghĩa là tôi đã in một giá trị không phải là JSON được trộn lẫn với tập lệnh gây ra lỗi AJAX - "SyntaxError: Mã thông báo bất ngờ r trong JSON ở vị trí 0"


0

Điều này có thể gây ra do mã javascript của bạn đang xem xét một số phản hồi json và bạn đã nhận được một cái gì đó khác như văn bản.


1
Vui lòng giải thích trong khi đưa ra câu trả lời thay vì đưa ra một lớp lót, trừ khi họ hoàn toàn giải quyết câu trả lời. Giải thích sẽ giúp người tìm câu trả lời hiểu rõ hơn về giải pháp.
Rai

0

Tôi đã có vấn đề tương tự. Tôi đang sử dụng một máy chủ node.js đơn giản để gửi phản hồi đến máy khách được tạo trong Angular 7. Ban đầu tôi đang gửi answer.end ('Xin chào thế giới từ máy chủ của nodejs'); cho khách hàng nhưng bằng cách nào đó góc cạnh không thể phân tích nó.


0

Những người đang sử dụng create-react-app và cố gắng tìm nạp các tệp json cục bộ.

Như trong create-react-app, webpack-dev-serverđược sử dụng để xử lý yêu cầu và cho mọi yêu cầu, nó phục vụ index.html. Vì vậy, bạn đang nhận được

Cú pháp: Mã thông báo bất ngờ <trong JSON ở vị trí 0.

Để giải quyết vấn đề này, bạn cần phải đẩy ứng dụng ra và sửa đổi webpack-dev-server tệp cấu hình.

Bạn có thể làm theo các bước từ đây .


0

Trong trường hợp của tôi (phụ trợ), tôi đã sử dụng res.send (mã thông báo);

Mọi thứ đã được sửa khi tôi thay đổi thành res.send (dữ liệu);

Bạn có thể muốn kiểm tra điều này nếu mọi thứ đang hoạt động và đăng như dự định, nhưng lỗi vẫn xuất hiện ở mặt trước của bạn.


0

Các khả năng cho lỗi này là quá nhiều.

Trong trường hợp của tôi, tôi thấy rằng vấn đề đã được thêm homepagevàopackage.json gây ra vấn đề.

Giá trị kiểm tra: package.jsonthay đổi:

homepage: "www.example.com"

đến

hompage: ""   

0

Tóm lại, nếu bạn gặp lỗi này hoặc lỗi tương tự, điều đó chỉ có một điều. Đó là, ở một nơi nào đó trong cơ sở mã của chúng tôi, chúng tôi đã mong đợi một định dạng JSON hợp lệ để xử lý và chúng tôi đã không nhận được một định dạng. Ví dụ:

var string = "some string";
JSON.parse(string)

Sẽ ném một lỗi, nói

Uncaught SyntaxError: Mã thông báo không mong đợi trong JSON ở vị trí 0

Bởi vì, ký tự đầu tiên trong đó strings& bây giờ không phải là JSON hợp lệ. Điều này có thể ném lỗi ở giữa cũng. giống:

var invalidJSON= '{"foo" : "bar", "missedquotehere : "value" }';
JSON.parse(invalidJSON)

Sẽ ném lỗi:

VM598:1 Uncaught SyntaxError: Unexpected token v in JSON at position 36

bởi vì chúng tôi cố tình bỏ lỡ một trích dẫn trong chuỗi JSON invalidJSONở vị trí 36.

Và nếu bạn sửa nó:

var validJSON= '{"foo" : "bar", "missedquotehere : "value" }';
JSON.parse(validJSON)

sẽ cung cấp cho bạn một đối tượng trong JSON.

Bây giờ, lỗi này có thể được ném ở bất kỳ nơi nào & trong bất kỳ khung / thư viện nào. Hầu hết thời gian bạn có thể đang đọc phản hồi mạng không phải là JSON hợp lệ. Vì vậy, các bước gỡ lỗi vấn đề này có thể như sau:

  1. curl hoặc nhấn API thực tế bạn đang gọi.
  2. Đăng nhập / Sao chép phản hồi và cố gắng phân tích nó với JSON.parse. Nếu bạn gặp lỗi, hãy sửa nó.
  3. Nếu không, hãy đảm bảo mã của bạn không bị thay đổi / thay đổi phản hồi ban đầu.

-2

Nếu bất kỳ ai khác đang sử dụng tìm nạp từ tài liệu "Sử dụng tìm nạp" trên API Web trong Mozilla: (Điều này thực sự hữu ích: https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch )

  fetch(api_url + '/database', {
    method: 'POST', // or 'PUT'
    headers: {
     'Content-Type': 'application/json'
    },
    body: qrdata //notice that it is not qr but qrdata
  })
  .then((response) => response.json())
  .then((data) => {
    console.log('Success:', data);
  })  
  .catch((error) => {
  console.error('Error:', error);  });

Đây là bên trong chức năng:

async function postQRData(qr) {

  let qrdata = qr; //this was added to fix it!
  //then fetch was here
}

Tôi đã chuyển vào chức năng của mình qrnhững gì tôi tin là một đối tượng vì qrtrông như thế này: {"name": "Jade", "lname": "Bet", "pet":"cat"}nhưng tôi cứ bị lỗi cú pháp. Khi tôi gán nó cho một cái gì đó khác: let qrdata = qr;nó hoạt động.


-7

Mã thông báo bất ngờ <trong JSON ở vị trí 0

Một giải pháp đơn giản cho lỗi này là viết bình luận trong styles.lesstệp.


48
Đây là một trong những câu trả lời kỳ lạ nhất tôi từng thấy trên Stackoverflow.
Kevin Leary

Chào bạn Khi đăng bình luận, hãy chắc chắn rằng nó hoàn toàn có thể áp dụng cho câu hỏi thực tế đang được hỏi. Câu trả lời của bạn có thể tốt hơn nếu bạn cho chúng tôi biết lý do tại sao việc viết bình luận chính xác trong một styles.lesstệp có thể giải quyết được vấn đề về mã máy chủ phụ trợ.
Andrew Gray
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.