"সিনট্যাক্সেরর: অপ্রত্যাশিত টোকেন <জেএসএনে 0 পজিশনে"


196

ফেসবুকের মতো সামগ্রী ফিডগুলি পরিচালনা করে এমন একটি প্রতিক্রিয়া অ্যাপ উপাদানটিতে আমি একটি ত্রুটির মধ্যে চলেছি:

ফিড.জেএস: 94 অপরিজ্ঞাত "পার্সেরিরর" "সিন্ট্যাক্স এরির: অপ্রত্যাশিত টোকেন <জেএসএনে 0 পজিশনে

আমি একটি অনুরূপ ত্রুটির মধ্যে দৌড়েছি যা রেন্ডার ফাংশনটির মধ্যে এইচটিএমএলটিতে টাইপো হিসাবে পরিণত হয়েছিল, তবে এখানে এটি মনে হয় না।

আরও বিভ্রান্তিকরভাবে, আমি কোডটি একটি পূর্ববর্তী, জ্ঞাত-কার্যকারী সংস্করণে ফিরিয়ে দিয়েছি এবং তবুও আমি ত্রুটি পাচ্ছি।

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

Chrome বিকাশকারী সরঞ্জামগুলিতে ত্রুটিটি এই ফাংশন থেকে আসছে বলে মনে হচ্ছে:

 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)
    });
  },

লাইন দিয়ে console.error(this.props.url, status, err.toString() আন্ডারলাইন।

যেহেতু মনে হচ্ছে ত্রুটিটি সার্ভার থেকে জেএসএন ডেটা টানতে কিছু আছে বলে মনে হচ্ছে, তাই আমি ফাঁকা ডিবি থেকে শুরু করার চেষ্টা করেছি, তবে ত্রুটিটি এখনও থেকেই যায়। সম্ভবত একটি অনন্ত লুপে ত্রুটি বলা হয়েছিল বলে মনে হচ্ছে প্রতিক্রিয়া ক্রমাগত সার্ভারের সাথে সংযোগ স্থাপন করার চেষ্টা করে এবং শেষ পর্যন্ত ব্রাউজারটিকে ক্র্যাশ করে।

সম্পাদনা করুন:

আমি ক্রোম দেব সরঞ্জামগুলি এবং ক্রোম আরএসটি ক্লায়েন্টের সাথে সার্ভারের প্রতিক্রিয়াটি চেক করেছি এবং ডেটা যথাযথ JSON বলে মনে হচ্ছে।

সম্পাদনা 2:

এটি প্রদর্শিত হয় যদিও লক্ষ্যযুক্ত এপিআই এর শেষ পয়েন্টটি সত্যই সঠিক জেএসওএন ডেটা এবং ফর্ম্যাটটি ফিরিয়ে দিচ্ছে, http://localhost:3000/?_=1463499798727প্রত্যাশার পরিবর্তে প্রতিক্রিয়াটি ভোট দিচ্ছে http://localhost:3001/api/threads

ব্যাকএন্ড ডেটা ফিরিয়ে আনতে আমি এক্সপ্রেস অ্যাপ্লিকেশনটি 3001 পোর্টে চলমান 3000 বন্দরটিতে একটি ওয়েবপ্যাক হট-রিলোড সার্ভার চালাচ্ছি। এখানে হতাশার বিষয়টি হ'ল এটি আমার শেষবারের মতো সঠিকভাবে কাজ করেছিল এবং এটি ভাঙ্গার জন্য আমি কী পরিবর্তন করতে পারি তা খুঁজে পাচ্ছি না।


11
এটি পরামর্শ দেয় যে আপনার "JSON" আসলে এইচটিএমএল। আপনি সার্ভার থেকে ফিরে আসা ডেটা দেখুন।
কোয়ান্টিন

2
আপনি যদি এর মতো কিছু করেন তবে এটি আপনার ত্রুটি JSON.parse("<foo>")- জেএসএন স্ট্রিং (যা দিয়ে আপনি প্রত্যাশা করেছেন dataType: 'json') দিয়ে শুরু হতে পারে না <
এপিসিলাররা

@ কোয়ান্টিন যেমন বলেছিলেন, এটি এইচটিএমএল হতে পারে, কোনও প্রকারের ত্রুটি হতে পারে, কিছু বিশ্রাম ক্লায়েন্টদের সাথে একই url চেষ্টা করে দেখুন
মরিসিটি

যেমন আমি উল্লেখ করেছি, আমি এটি একটি খালি ডিবি দিয়ে চেষ্টা করেছি (যা সহজভাবে ফিরে আসে []) এবং এটি এখনও একই ত্রুটি দেয়
ক্যামেরন সীমা

আপনার উপর নির্ভর করে আপনার সম্ভবত প্রক্সি এপিআই অনুরোধগুলি করা দরকার NODE_ENV। এটি দেখুন: github.com/facebookincubator/create-react-app/blob/master/…
কেভিন

উত্তর:


147

ত্রুটি বার্তার শব্দবন্ধটি আপনি চালনার সময় গুগল ক্রোম থেকে যা পান তার সাথে মিলে যায় JSON.parse('<...')। আমি জানি আপনি বলেছিলেন যে সার্ভারটি সেট হচ্ছে Content-Type:application/json, তবে আমি বিশ্বাস করি যে প্রতিক্রিয়া বডিটি আসলে এইচটিএমএল।

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

লাইন দিয়েconsole.error(this.props.url, status, err.toString()) আন্ডারলাইন।

errআসলে মধ্যে নিহিত ছিল jQueryএকটি পরিবর্তনশীল হিসাবে, এবং আপনি প্রেরণ err। লাইনটি আন্ডারলাইনের কারণটি হ'ল কারণ আপনি এটি লগইন করছেন।

আমি আপনাকে আপনার লগিং যোগ করার পরামর্শ দিচ্ছি। xhrপ্রতিক্রিয়া সম্পর্কে আরও জানতে প্রকৃত (এক্সএমএলএইচটিএইচপিআরকোয়েস্ট) বৈশিষ্ট্যগুলি দেখছেন । যুক্ত করার চেষ্টা করুন console.warn(xhr.responseText)এবং সম্ভবত আপনি যে HTML টি পেয়েছেন তা দেখতে পাবেন।


3
ধন্যবাদ, আমি এটি করেছি এবং আপনি ঠিক বলেছেন - প্রতিক্রিয়া হ'ল ভুল ইউআরএলটি পোলিং করছে এবং সূচি html এর সামগ্রীগুলি ফিরিয়ে দিচ্ছে। আমি কেন তা জানতে পারি না।
ক্যামেরন সিমা

8
অতিরিক্ত ডিবাগিং বিবৃতিটির জন্য ধন্যবাদ, যদিও আমার ব্যবহারের প্রয়োজন ছিল console.warn(jqxhr.responseText)। এটি আমার সমস্যা নির্ণয় করতে খুব সহায়ক ছিল।
ব্যবহারকারী 2441511

@ Mimi314159, console.log, console.warnএবং console.errorআপনার কনসোলে সব লিখতে হবে। তবে কনসোলটি সাধারণত লগিং ফিল্টার অপশন সরবরাহ করবে, সুতরাং আপনার পছন্দ অনুযায়ী সেগুলি সক্ষম বা অক্ষম রয়েছে তা নিশ্চিত হয়ে নিন।
ব্রায়ান ফিল্ড

1
আমার ক্ষেত্রে, একটি পিএইচপি ত্রুটি ঘটছিল যা সার্ভারকে বৈধ JSON এর পরিবর্তে এইচটিএমএল ফিরিয়েছে।
ডেরেক এস

52

আপনি সার্ভারটি থেকে এইচটিএমএল (বা এক্সএমএল) ফিরে পেয়েছেন, তবে dataType: jsonজেএসউরিটিকে JSON হিসাবে পার্স করতে বলছে। সার্ভারের প্রতিক্রিয়ার সামগ্রীগুলি দেখতে Chrome ডে সরঞ্জামগুলিতে "নেটওয়ার্ক" ট্যাবটি দেখুন।


আমি পরীক্ষা করে দেখেছি এবং এটি সঠিকভাবে ফর্ম্যাটেড জসনকে ফিরে আসবে বলে মনে হচ্ছে। এখানে প্রতিক্রিয়া শিরোনাম: অ্যাক্সেস-কন্ট্রোল-মঞ্জুরি-উত্স: * ক্যাশে-নিয়ন্ত্রণ: নন-ক্যাশে সামগ্রী-দৈর্ঘ্য: 2487 সামগ্রী-প্রকার: অ্যাপ্লিকেশন / জেসন; চরসেট = utf-8 তারিখ: মঙ্গল, 17 মে 2016 15:34:00 GMT ETag: W / "9b7-yi1 / G0RRpr0DlOVc9u7cMw" এক্স-পাওয়ার-দ্বারা: এক্সপ্রেস
ক্যামেরন সীমা

1
@ অবিআই আমার বিশ্বাস আপনি আপনার সংস্থান শ্রেণিতে মাইম টাইপ নির্দিষ্ট করতে হবে। (যেমন)@Produces(MediaType.APPLICATION_JSON)
ডিজে 2

10

এটি আমার জন্য অনুমতিগুলির সমস্যা হিসাবে শেষ হয়েছিল। আমি একটি ইউআরএলটি অ্যাক্সেস করার চেষ্টা করছিলাম যা আমার কাছে ক্যানকান দিয়ে অনুমোদিত ছিল না, তাই ইউআরএলটি স্যুইচ করা হয়েছিল users/sign_in। পুনঃনির্দেশিত ইউআরএল এইচটিএমএলে সাড়া দেয়, জাসনকে নয়। এইচটিএমএল প্রতিক্রিয়াটির প্রথম অক্ষরটি <


এবং যখন আপনি প্রতিক্রিয়া হিসাবে একটি এইচটিএমএল পাবেন .. আপনি কিভাবে এই এইচটিএমএল পুনর্নির্দেশ করতে পারেন? ধন্যবাদ.
JuMoGar

1
আমার একই ছিল, যদিও এএসপি.নেট এমভিসিতে। অন্যান্য .NETters এর জন্য, আমি [AllowAnonymous] বৈশিষ্ট্যটির সাথে আমার ক্রিয়াটি সাজাতে ভুলে গিয়েছিলাম যাতে ফ্রেমওয়ার্কটি আমার এইজেএক্স কলটি ক্র্যাশ করছে এমন HTML এ অননুমোদিত ত্রুটিটি ফিরিয়ে দেওয়ার চেষ্টা করছিল।
জেসন মার্শেল

8

আমি এই ত্রুটিটি "সিনট্যাক্স এরিয়ার: পজিশনে জেএসএনে অপ্রত্যাশিত টোকেন এম" অনুভব করেছি, যেখানে টোকেন 'মি' অন্য কোনও অক্ষর হতে পারে।

দেখা গেল যে আমি যখন ডিবি পরীক্ষার জন্য রিস্টকনসোলটি ব্যবহার করছিলাম তখন জেএসএন অবজেক্টের একটি ডাবল উদ্ধৃতি মিস করেছি, {"নাম:" গণিত "as হিসাবে সঠিকটি হওয়া উচিত {" নাম ":" গণিত "}

এই আনাড়ি ভুলটি বের করতে আমার অনেক প্রচেষ্টা লাগল। আমি আশঙ্কা করছি অন্যরাও একই ধরণের বোমা ফাটিয়ে দেবে।


5

আমার ক্ষেত্রে, আমি এই চলমান ওয়েবপ্যাকটি পেয়েছিলাম এবং এটি স্থানীয় নোড_মডিউলগুলির মধ্যে কোথাও কিছুটা দুর্নীতি হতে দেখা গেছে।

rm -rf node_modules
npm install

... এটি আবার কাজ করার জন্য যথেষ্ট ছিল।


1
এর সাথে, আমি প্যাকেজ-লক.জসন অপসারণের চেষ্টা করেছি। তারপরে এটি আমার পক্ষে কাজ করেছিল।
মহেশ

3

আমি আমার ক্ষেত্রে ত্রুটিটি আমার পরিবর্তনের জন্য আমার ফেরতের মান নির্ধারণ না করার ফলে হয়েছিল। নিম্নলিখিত ত্রুটির বার্তাটি সৃষ্টি করেছে:

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

আমি এটিকে পরিবর্তন করেছি:

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

ভেরিয়েবল ব্যতীত JSON সঠিকভাবে ডেটা ফর্ম্যাট করতে অক্ষম।


3

আপনি প্রতিক্রিয়াটিকে যেমন হিসাবে সংজ্ঞায়িত করেন এবং প্রতিক্রিয়া হিসাবে application/jsonআপনি একটি HTML পাচ্ছেন তখন এই ত্রুটি ঘটে । মূলত, আপনি যখন JSON এর প্রতিক্রিয়া সহ নির্দিষ্ট ইউআরএল জন্য সার্ভার সাইড স্ক্রিপ্ট লিখছেন তখন এটি ঘটেছিল তবে ত্রুটি বিন্যাসটি এইচটিএমএলে রয়েছে।




1

টিউটোরিয়াল অনুসরণ করার পরে আমার একই ত্রুটি বার্তা ছিল। আমাদের সমস্যাটি এজাক্স কলটিতে 'url: this.prop.url' বলে মনে হচ্ছে। React.DOM এ আপনি যখন আপনার উপাদানটি তৈরি করছেন তখন আমার এইরকম দেখাচ্ছে।

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

ঠিক আছে, এই কমেন্টবক্সের প্রপসগুলিতে একটি url নেই, কেবল তথ্য। আমি যখন স্যুইচ url: this.props.url->url: this.props.data , এটি সার্ভারে সঠিক কল করেছিল এবং আমি প্রত্যাশিত ডেটা ফিরে পেয়েছি।

আমি আসা করি এটা সাহায্য করবে.


1

আমার সমস্যাটি হ'ল আমি তথ্যটি এমন কোনওটিতে ফিরিয়ে stringআনছিলাম যা সঠিক জেএসওএন ফর্ম্যাটে ছিল না, যা আমি তখন এটি বিশ্লেষণের চেষ্টা করছিলাম। simple example: JSON.parse('{hello there}')এইচ এ ত্রুটি দেবে আমার ক্ষেত্রে কলব্যাক ইউআরএলগুলি অবজেক্টগুলির আগে একটি অপ্রয়োজনীয় চরিত্রটি ফিরিয়ে দিচ্ছিল: employee_names([{"name":....এবং 0 তে ত্রুটি পাচ্ছিল My


1

আমার ক্ষেত্রে, অ্যাজুরে হোস্টেড অ্যাঙ্গুলার 2/4 সাইটটির জন্য, আমার সাইট মাইসাইট / এপিআই / ... তে আমার এপিআই কলটি মাইসাইট রাউটিং সমস্যার কারণে পুনঃনির্দেশিত হয়েছিল। সুতরাং, এটি এপিআই জেএসএনের পরিবর্তে পুনঃনির্দেশিত পৃষ্ঠা থেকে এইচটিএমএল ফিরিয়েছিল। আমি এপিআই পাথের জন্য একটি ওয়েব কোডফাইগ ফাইলে একটি বর্জন যুক্ত করেছি।

স্থানীয়ভাবে বিকাশ করার সময় আমি এই ত্রুটিটি পাচ্ছিলাম না কারণ সাইট এবং এপিআই বিভিন্ন পোর্টে ছিল। এটি করার আরও ভাল উপায় সম্ভবত আছে ... তবে এটি কার্যকর হয়েছে।

<?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

এটি পুরানো হতে পারে। তবে, এটি কেবল কৌণিকভাবে ঘটেছে, অনুরোধ এবং প্রতিক্রিয়ার সামগ্রীর ধরণটি আমার কোডে ভিন্ন। সুতরাং, এর জন্য শিরোনাম পরীক্ষা করুন,

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

প্রতিক্রিয়া অক্ষরে

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

jQuery আজাক্স:

 $.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

এর সাথে অনেক সময় ব্যয় করার পরে, আমি জানতে পেরেছিলাম যে আমার ক্ষেত্রে সমস্যাটি আমার প্যাকেজটিতে "হোমপেজ" সংজ্ঞায়িত হচ্ছে। আমি ক্রিয়েট-রিএ্যাক্ট-অ্যাপ্লিকেশন ব্যবহার করে আমার প্রতিক্রিয়া অ্যাপ্লিকেশন তৈরি করেছি, তারপরে আমি গিথাব পৃষ্ঠাগুলিতে স্থাপন করার জন্য READ.me ফাইলটিতে ফায়ারবেস গাইডটি ব্যবহার করেছি, বুঝতে পেরেছিলাম যে রাউটারটি কাজ করার জন্য আমাকে অতিরিক্ত কাজ করতে হবে, এবং ফায়ারবেসে স্যুইচ করেছি। গিথুব গাইড প্যাকেজ.জসনে হোমপেজ কীটি যুক্ত করেছে এবং এটি মোতায়েনের সমস্যার কারণ ঘটেছে।


0

প্রতিলিপি: স্থানীয় নোড.জেএস সার্ভারে জেসন পরীক্ষা করছেন? নিশ্চিত হয়ে নিন যে আপনার কাছে ইতিমধ্যে সেই পথে যাত্রা করার কিছু নেই

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

0

একটি সাধারণ স্তরে এই ত্রুটি ঘটে যখন কোনও JSON অবজেক্ট পার্স করা হয় যার মধ্যে সিনট্যাক্স ত্রুটি রয়েছে। এই জাতীয় কিছু ভাবুন, যেখানে বার্তাটির সম্পত্তিটিতে অপরিশোধিত ডাবল উদ্ধৃতি রয়েছে:

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

যদি আপনার অ্যাপে কোথাও জেএসওএন থাকে তবে এটিতে সিনট্যাক্স ত্রুটি নেই তা যাচাই করতে এটি JSONLint এর মাধ্যমে চালানো ভাল । সাধারণত এটি আমার অভিজ্ঞতা হিসাবে না হলেও এটি সাধারণত জাসন অপরাধী এমন একটি এপিআই থেকে ফিরে আসে।

যখন কোনও এক্সএইচআর অনুরোধটি এইচটিটিপিআই এপিআইতে করা হয় যা ক এর সাথে প্রতিক্রিয়া দেয় Content-Type:application/json; charset=UTF-8 যা শিরোনামের শৃঙ্খলে অবৈধ জেএসওএন থাকে আপনি এই ত্রুটিটি দেখতে পাবেন।

যদি কোনও সার্ভার-সাইড এপিআই কন্ট্রোলারটি ভুলভাবে সিন্ট্যাক্স ত্রুটিটি পরিচালনা করে এবং প্রতিক্রিয়ার অংশ হিসাবে এটি মুদ্রণ করা হচ্ছে তবে এটি JSON এর কাঠামোটি ভেঙে দেবে। এর একটি ভাল উদাহরণ হ'ল একটি পিআইপিপি সতর্কতা বা প্রতিক্রিয়া সংস্থার নোটিশ যুক্ত একটি এপিআই প্রতিক্রিয়া:

<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% সময় এটিই আমার জন্য সমস্যাটির উত্স এবং যদিও এখানে অন্যান্য প্রতিক্রিয়াগুলিতে কিছুটা সমাধান করা হয়েছে তবে আমি এটিকে পরিষ্কারভাবে বর্ণনা করা হয়নি বলে মনে করি। আশা করি এটি সাহায্য করে, যদি আপনি কোন এপিআই প্রতিক্রিয়াতে কোনও JSON সিনট্যাক্স ত্রুটি রয়েছে তা ট্র্যাক করার কোনও সহজ উপায় সন্ধান করছেন আমি এর জন্য একটি কৌণিক মডিউল লিখেছি ।

মডিউলটি এখানে:

/**
 * 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' );
    } ] );

উপরে উল্লিখিত ব্লগ নিবন্ধে আরও বিশদ পাওয়া যাবে, এটি সমস্ত প্রাসঙ্গিক না হওয়ায় আমি এখানে পাওয়া সমস্ত কিছু পোস্ট করি নি।


0

আমার পক্ষে, এটি তখন ঘটল যখন আমি যখন জেএসওএন ব্যতিক্রম ছুঁড়ে ফিরছিলাম সেই অবজেক্টের কোনও একটি বৈশিষ্ট্য।

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;
    }
}

নাল চেক যুক্ত করা, এটি আমার জন্য স্থির করুন:

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

যাচাই করার জন্য কেবল কিছু বেসিক, নিশ্চিত করুন যে আপনি জসন ফাইলে কোনও মন্তব্য করেছেন না

//comments here will not be parsed and throw error

0

কেবলমাত্র উত্তরগুলিতে যুক্ত করার জন্য, আপনার এপিআই প্রতিক্রিয়াটি অন্তর্ভুক্ত হলে এটিও ঘটে

<?php{username: 'Some'}

আপনার ব্যাকএন্ড পিএইচপি ব্যবহার করার সময় এটি একটি কেস হতে পারে।


0

পাইথনে আপনি এইচটিএমএল টেমপ্লেটে ফলাফল প্রেরণের আগে json.Dump (str) ব্যবহার করতে পারেন। এই কমান্ড স্ট্রিং সহ সঠিকভাবে জসন ফর্ম্যাটকে রূপান্তর করুন এবং এইচটিএমএল টেমপ্লেটে প্রেরণ করুন। এই ফলাফলটি JSON.parse (ফলাফল) এ প্রেরণের পরে, এটি সঠিক প্রতিক্রিয়া এবং আপনি এটি ব্যবহার করতে পারেন।


0

কারও কারও কাছে এটি আপনাকে সাহায্য করতে পারে: ওয়ার্ডপ্রেস আরএসটি এপিআইয়ের সাথে আমারও একইরকম অভিজ্ঞতা ছিল। এমনকি পোস্টম্যানকে আমার সঠিক রুটগুলি বা শেষ পয়েন্ট আছে কিনা তা পরীক্ষা করতে ব্যবহার করেছিলাম। পরে আমি জানতে পেরেছিলাম যে আমি ভুলক্রমে আমার স্ক্রিপ্ট-হুকের ভিতরে একটি "প্রতিধ্বনি" রেখেছি:

আপনার কনসোলটি ডিবাগ করুন এবং চেক করুন

ত্রুটির কারণ

সুতরাং মূলত, এর অর্থ হল যে আমি এমন একটি মুদ্রণ করেছি যা JSON নয় যা স্ক্রিপ্টের সাথে মিশ্রিত হয় যা AJAX ত্রুটির কারণ করে - "সিনট্যাক্সেরর: জেনসনে অপ্রত্যাশিত টোকেন 0 পজিশনে"


0

এটি আপনার জাভাস্ক্রিপ্ট কোডের কারণে কিছু জসন প্রতিক্রিয়ার দিকে তাকিয়ে থাকতে পারে এবং আপনি পাঠ্যের মতো অন্য কিছু পেয়েছিলেন।


1
একটি লাইনার দেওয়ার পরিবর্তে উত্তর দেওয়ার সময় দয়া করে বিস্তারিত বলুন, যদি না তারা প্রত্যক্ষভাবে উত্তরগুলির সমাধান করে solve ব্যাখ্যাটি উত্তর-সন্ধানকারীদের সমাধানটিকে আরও ভালভাবে বুঝতে সহায়তা করবে।
রায়

0

আমারও একই সমস্যা ছিল আমি কৌনিক in. এ তৈরি ক্লায়েন্টের প্রতিক্রিয়া প্রেরণের জন্য একটি সাধারণ নোড.জেএস সার্ভার ব্যবহার করছি Initial প্রাথমিকভাবে আমি প্রতিক্রিয়া পাঠাচ্ছিলাম end ক্লায়েন্টের কাছে তবে কোনওভাবে কৌণিক এটি বিশ্লেষণ করতে অক্ষম ছিল।


0

যারা create-react-appস্থানীয় জেসন ফাইলগুলি ব্যবহার এবং চেষ্টা করার চেষ্টা করছেন।

হিসাবে create-react-app, webpack-dev-serverঅনুরোধটি পরিচালনা করতে ব্যবহৃত হয় এবং প্রতিটি অনুরোধের জন্য এটি সরবরাহ করে index.html। সুতরাং আপনি পাচ্ছেন

সিনট্যাক্স এরর: অপ্রত্যাশিত টোকেন <জেএসএনে 0 অবস্থানে।

এটি সমাধানের জন্য আপনাকে অ্যাপটি বের করে এনে webpack-dev-serverকনফিগারেশন ফাইলটি পরিবর্তন করতে হবে।

আপনি এখান থেকে পদক্ষেপগুলি অনুসরণ করতে পারেন ।


0

আমার ক্ষেত্রে (ব্যাকএন্ড), আমি res.send (টোকেন) ব্যবহার করছিলাম;

আমি পুনরায় বিক্রয় (ডেটা) এ পরিবর্তিত হয়ে সমস্ত কিছু ঠিক হয়ে গেছে;

আপনি যদি এটি কাজ করে এবং উদ্দেশ্য হিসাবে পোস্ট করে যাচ্ছেন তা আপনি এটি পরীক্ষা করতে চাইতে পারেন, তবে ত্রুটিটি আপনার সম্মুখ-প্রান্তে পপ আপ করে রাখে।


0

এই ত্রুটির সম্ভাবনা অপ্রতিরোধ্য।

আমার ক্ষেত্রে, আমি দেখতে পেয়েছি যে সমস্যাটি এই কারণে homepageদায়েরকৃত ফাইলটি যুক্ত করছে package.json

মূল্যবান চেকিং: package.jsonপরিবর্তনে:

homepage: "www.example.com"

প্রতি

hompage: ""   

0

সংক্ষেপে, আপনি যদি এই ত্রুটি বা অনুরূপ ত্রুটিটি পেয়ে থাকেন তবে তার অর্থ কেবল একটি জিনিস। এটিই, আমাদের কোডবেসের কোনও জায়গায় আমরা বৈধ জেএসএন ফর্ম্যাটটি প্রক্রিয়াজাতকরণের প্রত্যাশা করছিলাম এবং আমরা একটিও পাইনি। উদাহরণ স্বরূপ:

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

বলে ত্রুটি ছুড়ে মারবে

আনকচড সিনট্যাক্স এরিয়ার: 0 অবস্থানের জেএসএনে অপ্রত্যাশিত টোকেন s

কারণ, প্রথম অক্ষরের stringহয় s& এটি একটি বৈধ JSON এখন নয়। এটি এর মধ্যেও ত্রুটি ফেলে দিতে পারে। মত:

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

ত্রুটি নিক্ষেপ করবে:

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

কারণ আমরা ইচ্ছাকৃতভাবে JSON স্ট্রিংয়ের একটি উদ্ধৃতি মিস করেছি invalidJSON 36 নম্বর অবস্থানে ।

এবং যদি আপনি এটি স্থির করেন:

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

আপনাকে JSON এ একটি অবজেক্ট দেবে।

এখন, এই ত্রুটিটি যে কোনও জায়গায় এবং যে কোনও ফ্রেমওয়ার্ক / লাইব্রেরিতে ফেলে দেওয়া যেতে পারে। বেশিরভাগ সময় আপনি কোনও নেটওয়ার্ক প্রতিক্রিয়া পড়তে পারেন যা বৈধ JSON নয়। সুতরাং এই সমস্যাটি ডিবাগ করার পদক্ষেপগুলি এর মতো হতে পারে:

  1. curl বা আপনি যে প্রকৃত এপিআই কল করছেন তাতে আঘাত করুন।
  2. প্রতিক্রিয়াটি লগ করুন / অনুলিপি করুন এবং এটি দিয়ে পার্স করার চেষ্টা করুন JSON.parse। আপনি যদি ত্রুটি পেয়ে থাকেন তবে এটি ঠিক করুন।
  3. যদি তা না হয় তবে নিশ্চিত হয়ে নিন যে আপনার কোডটি মূল প্রতিক্রিয়ার পরিবর্তন করছে না / পরিবর্তন করছে না।

-2

যদি অন্য কেউ মজিলায় ওয়েব এপিআইয়ের "ব্যবহার করে" ডকুমেন্টেশন থেকে আনতে থাকেন: (এটি সত্যিই দরকারী: 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);  });

এটি ফাংশনের ভিতরে ছিল:

async function postQRData(qr) {

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

আমি আমার ফাংশনটিতে qrযাচ্ছিলাম যা আমি বিশ্বাস করি যা একটি বস্তু বলে qrমনে হচ্ছে কারণ এটি দেখতে দেখতে: {"name": "Jade", "lname": "Bet", "pet":"cat"}তবে আমি সিনট্যাক্স ত্রুটিগুলি পেয়েছি। যখন আমি এটিকে অন্য কোনও বিষয়কে অর্পণ করি: let qrdata = qr;এটি কাজ করে।


-7

অপ্রত্যাশিত টোকেন <জেএসএনে 0 পজিশনে

এই ত্রুটির একটি সহজ সমাধান হ'ল styles.lessফাইলটিতে একটি মন্তব্য লিখুন ।


48
স্ট্যাকওভারফ্লোতে আমি এটি দেখেছি এমন একটি উদ্ভট উত্তর।
কেভিন লেয়ারি

হাই! কোনও মন্তব্য পোস্ট করার সময়, নিশ্চিত হয়ে উঠুন যে এটি জিজ্ঞাসা করা প্রকৃত প্রশ্নে সম্পূর্ণরূপে প্রযোজ্য। আপনার উত্তরটি আরও ভাল হতে পারে যদি আপনি আমাদের জানান যে সঠিকভাবে কোনও styles.lessফাইলে মন্তব্য লেখার ফলে ব্যাক-এন্ড সার্ভার কোড সমস্যাটি মনে হয় তবে তা সমাধান করতে পারে।
অ্যান্ড্রু গ্রে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.