javascript-"SyntaxError:予期しないトークン
Facebookのようなコンテンツフィードを処理するReactアプリコンポーネントで、エラーが発生しました:
Feed.js:94 undefined "parsererror" "SyntaxError:予期しないトークン
同様のエラーが発生し、render関数内のHTMLのタイプミスであることが判明しましたが、ここではそうではないようです。
さらに紛らわしいことに、コードを以前の既知の動作バージョンにロールバックしましたが、それでもエラーが発生します。
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データのプルに関係しているように見えるため、空のデータベースから開始しようとしましたが、エラーが解決しません。おそらく、Reactがサーバーへの接続を継続的に試行し、最終的にブラウザをクラッシュさせるため、エラーは無限ループで呼び出されるようです。
編集:
Chrome開発ツールとChromeRESTクライアントを使用してサーバーの応答を確認しましたが、データは適切なJSONのようです。
編集2:
目的のAPIエンドポイントは実際に正しいJSONデータと形式を返しているようですが、Reactは予期されたhttp://localhost:3001/api/threadsではなくhttp://localhost:3000/?_=1463499798727
をポーリングしているようです
。
ポート3000でwebpackホットリロードサーバーを実行しており、エクスプレスアプリをポート3001で実行してバックエンドデータを返しています。ここでイライラするのは、これが最後に作業したときに正しく機能していて、それを壊すために変更できた可能性のあるものが見つからないことです。
わからない
0 レビュー
答え :
解決策:
errまたはメッセージの文言は、 JSON.parse('<...')
を実行したときにGoogleChromeから取得するものに対応しています。サーバーがContent-Type:application/json
を設定しているとのことですが、応答 bodyは実際にはHTMLであると思われます。
Feed.js:94 undefined "parsererror" "SyntaxError: Unexpected token < in JSON at position 0"
console.error(this.props.url, status, err.toString())
の行に下線を付けます。
err
は実際にはjQuery
内にスローされ、変数{-code-5として渡されました。 }
。行に下線が引かれている理由は、それがログに記録されている場所だからです。
ログに追加することをお勧めします。実際のxhr
(XMLHttpRequest)プロパティを調べて、応答の詳細を確認します。 console.warn(xhr .responseText)
を追加してみてください。そうすれば、受信されているHTMLが表示される可能性が高くなります。
答えへのリンク
わからない
0 レビュー
答え :
解決策:
サーバーからHTML(またはXML)を受信していますが、 dataType: json
はjQueryにJSONとして解析するように指示しています。サーバーの応答の内容を確認するには、Chrome開発ツールの[ネットワーク]タブを確認してください。
答えへのリンク
わからない
0 レビュー
答え :
解決策:
SyntaxError:予期しないトークン
jsonの代わりにHTMLファイル(またはXML)を取得しています。
HTMLファイルは<!DOCTYPE html>
で始まります。
fetch
メソッドのhttps://
を忘れることで、このエラーを「達成」しました:
fetch( `/api.github.com/users/${login}`)
.then(response => response.json())
.then(setData);
予感を確認しました:
応答をJSONではなくテキストとして記録しました。
fetch( `/api.github.com/users/${login}`)
.then(response => response.text())
.then(text => console.log(text))
.then(setData);
はい、htmlファイルです。
解決策:
fetch
メソッドにhttps://
を追加してエラーを修正しました。
fetch( `https:// api.github.com/users/${login}`)
.then(response => response.json())
.then(setData)
.catch(error =>(console.log(error)));
答えへのリンク
わからない
0 レビュー
答え :
解決策:
私の場合、この実行中のWebpackを取得していましたが、ローカルのnode_modulesディレクトリのどこかで破損していることが判明しました。
rm -rf node_modules
npm install
...それを再び正しく機能させるには十分でした。
答えへのリンク
わからない
0 レビュー
答え :
解決策:
これは私にとって権限の問題になりました。 cancanで認証されていないURLにアクセスしようとしたため、URLが users/sign_in
に切り替えられました。リダイレクトされたURLは、jsonではなくhtmlに応答します。 HTML応答の最初の文字は、 <
です。
答えへのリンク
わからない
0 レビュー
答え :
解決策:
create-react-app
を使用していて、ローカルのjsonファイルをフェッチしようとしている人。
create-react-app
と同様に、 webpack-dev-server
はリクエストの処理に使用され、リクエストごとに{-を処理します。 code-4}
。だからあなたは
を取得しています
SyntaxError:予期しないトークン
これを解決するには、アプリを取り出して webpack-dev-server
構成ファイルを変更する必要があります。
こちらの手順に従うことができます。
答えへのリンク
わからない
0 レビュー
答え :
解決策:
このエラーは、応答を application/json
として定義し、応答としてHTMLを取得している場合に発生します。基本的に、これは、JSONの応答を使用して特定のURLのサーバー側スクリプトを記述しているが、エラー形式がHTMLである場合に発生しました。
答えへのリンク
わからない
0 レビュー
答え :
解決策:
私の場合、AzureでホストされているAngular 2/4サイトの場合、mySiteルーティングの問題が原因でmySite / api/...へのAPI呼び出しがリダイレクトされていました。そのため、APIJSONではなくリダイレクトされたページからHTMLを返していました。 apiパスのweb.configファイルに除外を追加しました。
サイトとAPIが異なるポートにあるため、ローカルで開発するときにこのエラーが発生しませんでした。これを行うにはおそらくもっと良い方法があります...しかしそれはうまくいきました。
<?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>
答えへのリンク
わからない
0 レビュー
答え :
解決策:
このエラー「SyntaxError:位置にあるJSONの予期しないトークンm」が発生しました。トークン「m」は他の文字にすることができます。
DBテストにRESTconsoleを使用していたときに、JSONオブジェクトの二重引用符の1つを見逃したことが判明しました。{"name:" math "}、正しいものは{" name ":"math"である必要があります}
この不器用な間違いを理解するのに多大な労力を要しました。私は他の人が同様の不幸に遭遇するのではないかと心配しています。
答えへのリンク
わからない
0 レビュー
答え :
解決策:
CRAによって作成されたReactアプリの場合、 <dummy.json>
のJSONデータをフェッチするときに直面する可能性のある2つの主な問題があります。
ファイル。
プロジェクトにdummy.jsonファイルがあり、そのファイルからJSONデータをフェッチしようとしていますが、2つのエラーが発生しました:
"SyntaxError: Unexpected token < in JSON at position 0 .
Chromeまたは任意のブラウザの[ネットワーク]タブの応答で、実際のJSONデータではなくHTMLファイルを取得しました。
これが私の問題を解決した主な2つの理由です。
- JSONデータがJSONファイルで無効です。
- このためにJSONファイルが正しく読み込まれなかった可能性があるため、Reactサーバーを再起動するだけです。これは私の問題です。React内です。
直接実行に反応するか、srcフォルダーではなくパブリックフォルダーにアクセスします。
解決方法:
ファイルをパブリックフォルダに移動しましたが、アクセスはsrcフォルダの任意のファイルに直接アクセスできます。
Redux action.jsでREST呼び出しを行う:
export const fetchDummy = ()=>{
return (dispatch)=>{
dispatch(fetchDummyRequest());
fetch('./assets/DummyData.json')
.then(response => {
if (!response.ok) {
throw new Error("HTTP error " + response.status);
}
return response.json();
})
.then(result => {
dispatch(fetchDummySuccess(result))
})
.catch(function (err) {
dispatch(fetchDummyFailure(err))
})
}
}
答えへのリンク
わからない
0 レビュー
答え :
解決策:
簡単に言うと、sエラーまたはs同様のエラーが発生した場合、それは{- code-3}1つだけ。そのis、コードバのsどこかs eで、有効なJSON形式が処理されることを期待していましたs s取得できませんでした。例:
var string = "some string";
JSON.parse(string)
エラーがスローされます、s aying
Uncaught SyntaxError:予期しないトークンs in JSON in po s ition 0
Becau s e、 string
i s{-code-のfirst文字3}
&it's現在有効なJSONではありません。 Thi sは、alsoの間にエラーをスローする可能性があります。のように:
var invalidJSON ='{"foo": "bar"、 "mi s s edquotehere:" value "}';
JSON.par s e(invalidJSON)
エラーがスローされます:
VM598:1 Uncaught SyntaxError:予期しないトークンv in JSON at po s ition 36
because意図的にmissをJSONで引用符で囲んだstringinvalidJSON po sition36で。
それを修正した場合:
var validJSON ='{"foo": "bar"、 "mi s s edquotehere": "value"}';
JSON.par s e(validJSON)
JSONでオブジェクトを提供します。
これで、このsエラーは、任意の場所および任意のフレームワーク/ライブラリでスローされる可能性があります。ネットワークresponseを読んでいる可能性があります。これはsが無効なJSONです。したがって、デバッグのs tep s s i ssueは次のようになります。
curl
または呼び出している実際のAPIをヒットします。
- re s pon s eをログに記録/コピーし、
JSON.parseとparseを試してください。エラーが発生した場合は、修正してください。
- そうでない場合は、sureコードをisにして、元のre s ponseを変更/変更しないようにします。
答えへのリンク
わからない
0 レビュー
答え :
解決策:
POSTメソッドでフェッチAPIを使用してReactでAPIを呼び出しているときに、同じエラーが発生しました。
前:
fetch('/api/v1/tour',{
method:"POST",
headers:{"Content-type":"json/application"},
body:JSON.stringify(info)
})
.then((response)=>response.json())
.then((json)=>{
if(json.status === 'success')
alert(json.message)
else
console.log('something went wrong :(')
}).catch(e=>console.log(e))
ヘッダーを{"Content-type":"application/json"}
に変更してエラーを解決しました:
後:
fetch('/ api / v1 / tour'、{
メソッド: "POST"、
ヘッダー:{"Content-type":"application/json"}、
body:JSON.stringify(info)
})
.then((response)=> response.json())
.then((json)=> {
if(json.status ==='成功')
alert(json.message)
そうしないと
console.log('何かがうまくいかなかった:(')
})。catch(e => console.log(e))
答えへのリンク
わからない
0 レビュー
答え :
解決策:
一般的なレベルでは、このエラーは、構文エラーが含まれているJSONオブジェクトが解析されたときに発生します。メッセージプロパティにエスケープされていない二重引用符が含まれている次のようなものを考えてみてください。
{
"data": [{
"code": "1",
"message": "This message has "unescaped" quotes, which is a JSON syntax error."
}]
}
アプリのどこかにJSONがある場合は、 JSONLint を実行して、構文エラーがないことを確認することをお勧めします。通常、これは当てはまりませんが、私の経験では、通常、原因であるAPIから返されるJSONです。
応答本文に無効なJSONを含むContent-Type:application/json; charset=UTF-8
ヘッダーを含む応答を返すHTTPAPIに対してXHRリクエストが行われると、このエラーが表示されます。
サーバー側のAPIコントローラーが構文エラーを不適切に処理していて、それが応答の一部として出力されている場合、返されるJSONの構造が壊れます。この良い例は、応答本文にPHPの警告または通知を含むAPI応答です。
<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%の確率でこれが問題の原因であり、他の回答ではここでいくらか取り上げられていますが、明確に説明されているとは感じませんでした。うまくいけば、これが役立つことを願っています。どのAPI応答にJSON構文エラーが含まれているかを追跡する便利な方法を探している場合は、そのためのAngularモジュールを作成しました。
モジュールは次のとおりです:
/**
* 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 レビュー
答え :
解決策:
他の回答で説明されているように、JSONの代わりに不正な形式のJSONまたはHTMLがこの問題の根本的な原因ですが、私の場合、このエラーを確実に再現できませんでした。サーバーが有効なJSONを返すこともあれば、HTMLエラーページなどを返すこともありました。
ページを完全に壊さないようにするために、返されたコンテンツを手動で解析し、他の誰かが解決するのに役立つ場合に備えて共有しようとしました。
const url = "https://my.server.com/getData";
fetch(url).then(response => {
if (!response.ok) return; // call failed
response.text().then(shouldBeJson => { // get the text-only of the response
let json = null;
try {
json = JSON.parse(shouldBeJson); // try to parse that text
} catch (e) {
console.warn(e); // json parsing failed
return;
};
if (!json) return; // extra check just to make sure we have something now.
// do something with my json object
});
});
これは明らかに問題の根本的な原因を解決するものではありませんが、問題をもう少し適切に処理し、失敗した場合に何らかの合理的なアクションを実行するのに役立ちます。
答えへのリンク
わからない
0 レビュー
答え :
解決策:
このエラーの可能性は圧倒的です。
私の場合、問題の原因は package.json
にファイルされたhomepage
の追加であることがわかりました。
>
価値の確認: package.json
の変更:
homepage: "www.example.com"
から
hompage: ""
答えへのリンク
わからない
0 レビュー
答え :
解決策:
将来のグーグル向け:
このメッセージは、サーバー側の機能がクラッシュした場合に生成されます。
または、サーバー側の関数が存在しない場合(つまり、関数名のタイプミス)。
つまり、GETリクエストを使用していて、すべてが完璧に見え、すべてをトリプルチェックしたとします...
もう一度GET文字列を確認してください。私のは:
'/theRouteIWant&someVar=Some value to send'
あるべきです
'/theRouteIWant?someVar=Some value to send'
^
CrAsH! (... 目に見えない、 on サーバー ...)
Node / Expressは、非常に役立つメッセージを送り返します。
Uncaught (in promise) SyntaxError: Unexpected token < in JSON at position 0
答えへのリンク
わからない
0 レビュー
答え :
解決策:
私の問題は、適切なJSON形式ではない string
でデータを取得していたことでした。それを解析しようとしています。 simple example: JSON.parse('{hello there}')
はhでエラーを出します。私の場合、コールバックURLはオブジェクトの前に不要な文字を返していました: employee_names([{"name":....
そして0でeでエラーが発生していました。私のコールバックURL自体に問題があり、修正すると、オブジェクト。
答えへのリンク
わからない
0 レビュー
答え :
解決策:
チュートリアルの後に同じエラーメッセージが表示されました。私たちの問題は、ajax呼び出しの「url: this.props.url」のようです。要素を作成するときのReact.DOMでは、私のものは次のようになります。
ReactDOM.render(
<CommentBox data="/api/comments" pollInterval={2000}/>,
document.getElementById('content')
);
そうですね、このCommentBoxの小道具にはURLがなく、データだけが含まれています。 url: this.props.url
-> url: this.props.data
を切り替えると、サーバーが正しく呼び出され、期待されるデータが返されました。
お役に立てば幸いです。
答えへのリンク
わからない
0 レビュー
答え :
解決策:
これは古い可能性があります。しかし、それは角度で発生しただけで、リクエストとレスポンスのコンテンツタイプは私のコードでは異なっていました。したがって、ヘッダーを確認してください、
let headers = new Headers({
'Content-Type': 'application/json',
**Accept**: 'application/json'
});
Reactaxiosで
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 レビュー
答え :
解決策:
私の場合、エラーは戻り値を変数に割り当てなかったことが原因でした。次の原因でエラーメッセージが表示されました。
return new JavaScriptSerializer().Serialize("hello");
次のように変更しました:
string H = "hello";
return new JavaScriptSerializer().Serialize(H);
変数がないと、JSONはデータを適切にフォーマットできません。
答えへのリンク
わからない
0 レビュー
答え :
解決策:
回答に追加するだけで、API応答に
が含まれている場合にも発生します。
<?php{username: 'Some'}
これは、バックエンドがPHPを使用している場合に発生する可能性があります。
答えへのリンク
わからない
0 レビュー
答え :
解決策:
他の誰かがMozillaのWebAPIの「UsingFetch」ドキュメントからフェッチを使用している場合:
(これは本当に便利です: 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 qr data = qr;
それは機能しました。
答えへのリンク
わからない
0 レビュー
答え :
解決策:
コンソールでこのコード行を実行しようとした場合:
JSON.parse(undefined);
同じエラーメッセージが表示されます:
"SyntaxError: Unexpected token < in JSON at position 0"
したがって、アプリは無効なJSON undefined
を解析しようとしています。
答えへのリンク
わからない
0 レビュー
答え :
解決策:
これに多くの時間を費やした後、私の場合、package.jsonファイルで「ホームページ」が定義されているためにアプリがFirebaseで機能しないことが問題であることがわかりました(同じ「トークン」エラー)。
create-react-appを使用してreactアプリを作成し、READ.meファイルのfirebaseガイドを使用してgithubページにデプロイし、ルーターが機能するために追加の作業を行う必要があることに気付き、firebaseに切り替えました。 githubガイドがpackage.jsonにホームページキーを追加し、デプロイの問題を引き起こしました。
答えへのリンク
わからない
0 レビュー
答え :
解決策:
ヒント:ローカルのNode.jsサーバーでjsonをテストしますか?そのパスへのルーティングがまだないことを確認してください
'/:url(app|assets|stuff|etc)';
答えへのリンク
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。
Facebookのようなコンテンツフィードを処理するReactアプリコンポーネントで、エラーが発生しました:
Feed.js:94 undefined "parsererror" "SyntaxError:予期しないトークン
同様のエラーが発生し、render関数内のHTMLのタイプミスであることが判明しましたが、ここではそうではないようです。
さらに紛らわしいことに、コードを以前の既知の動作バージョンにロールバックしましたが、それでもエラーが発生します。
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データのプルに関係しているように見えるため、空のデータベースから開始しようとしましたが、エラーが解決しません。おそらく、Reactがサーバーへの接続を継続的に試行し、最終的にブラウザをクラッシュさせるため、エラーは無限ループで呼び出されるようです。
編集:
Chrome開発ツールとChromeRESTクライアントを使用してサーバーの応答を確認しましたが、データは適切なJSONのようです。
編集2:
目的のAPIエンドポイントは実際に正しいJSONデータと形式を返しているようですが、Reactは予期された
http://localhost:3001/api/threadsではなく
。http://localhost:3000/?_=1463499798727
をポーリングしているようですポート3000でwebpackホットリロードサーバーを実行しており、エクスプレスアプリをポート3001で実行してバックエンドデータを返しています。ここでイライラするのは、これが最後に作業したときに正しく機能していて、それを壊すために変更できた可能性のあるものが見つからないことです。
答え :
解決策:
errまたはメッセージの文言は、 JSON.parse('<...')
を実行したときにGoogleChromeから取得するものに対応しています。サーバーがContent-Type:application/json
を設定しているとのことですが、応答 bodyは実際にはHTMLであると思われます。
Feed.js:94 undefined "parsererror" "SyntaxError: Unexpected token < in JSON at position 0"
console.error(this.props.url, status, err.toString())
の行に下線を付けます。
err
は実際にはjQuery
内にスローされ、変数{-code-5として渡されました。 }
。行に下線が引かれている理由は、それがログに記録されている場所だからです。ログに追加することをお勧めします。実際の
xhr
(XMLHttpRequest)プロパティを調べて、応答の詳細を確認します。console.warn(xhr .responseText)
を追加してみてください。そうすれば、受信されているHTMLが表示される可能性が高くなります。
答え :
解決策:
サーバーからHTML(またはXML)を受信していますが、 dataType: json
はjQueryにJSONとして解析するように指示しています。サーバーの応答の内容を確認するには、Chrome開発ツールの[ネットワーク]タブを確認してください。
答え :
解決策:
SyntaxError:予期しないトークン
jsonの代わりにHTMLファイル(またはXML)を取得しています。
HTMLファイルは
<!DOCTYPE html>
で始まります。
fetch
メソッドのhttps://
を忘れることで、このエラーを「達成」しました:fetch( `/api.github.com/users/${login}`) .then(response => response.json()) .then(setData);
予感を確認しました:
応答をJSONではなくテキストとして記録しました。
fetch( `/api.github.com/users/${login}`) .then(response => response.text()) .then(text => console.log(text)) .then(setData);
はい、htmlファイルです。
解決策:
fetch
メソッドにhttps://
を追加してエラーを修正しました。fetch( `https:// api.github.com/users/${login}`) .then(response => response.json()) .then(setData) .catch(error =>(console.log(error)));
答え :
解決策:
私の場合、この実行中のWebpackを取得していましたが、ローカルのnode_modulesディレクトリのどこかで破損していることが判明しました。
rm -rf node_modules
npm install
...それを再び正しく機能させるには十分でした。
答え :
解決策:
これは私にとって権限の問題になりました。 cancanで認証されていないURLにアクセスしようとしたため、URLが users/sign_in
に切り替えられました。リダイレクトされたURLは、jsonではなくhtmlに応答します。 HTML応答の最初の文字は、 <
です。
答え :
解決策:
create-react-app
を使用していて、ローカルのjsonファイルをフェッチしようとしている人。
create-react-app
と同様に、 webpack-dev-server
はリクエストの処理に使用され、リクエストごとに{-を処理します。 code-4}
。だからあなたは
SyntaxError:予期しないトークン
これを解決するには、アプリを取り出して
webpack-dev-server
構成ファイルを変更する必要があります。こちらの手順に従うことができます。
答え :
解決策:
このエラーは、応答を application/json
として定義し、応答としてHTMLを取得している場合に発生します。基本的に、これは、JSONの応答を使用して特定のURLのサーバー側スクリプトを記述しているが、エラー形式がHTMLである場合に発生しました。
答え :
解決策:
私の場合、AzureでホストされているAngular 2/4サイトの場合、mySiteルーティングの問題が原因でmySite / api/...へのAPI呼び出しがリダイレクトされていました。そのため、APIJSONではなくリダイレクトされたページからHTMLを返していました。 apiパスのweb.configファイルに除外を追加しました。
サイトとAPIが異なるポートにあるため、ローカルで開発するときにこのエラーが発生しませんでした。これを行うにはおそらくもっと良い方法があります...しかしそれはうまくいきました。
<?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>
答え :
解決策:
このエラー「SyntaxError:位置にあるJSONの予期しないトークンm」が発生しました。トークン「m」は他の文字にすることができます。
DBテストにRESTconsoleを使用していたときに、JSONオブジェクトの二重引用符の1つを見逃したことが判明しました。{"name:" math "}、正しいものは{" name ":"math"である必要があります}
この不器用な間違いを理解するのに多大な労力を要しました。私は他の人が同様の不幸に遭遇するのではないかと心配しています。
答え :
解決策:
CRAによって作成されたReactアプリの場合、 <dummy.json>
のJSONデータをフェッチするときに直面する可能性のある2つの主な問題があります。
ファイル。
プロジェクトにdummy.jsonファイルがあり、そのファイルからJSONデータをフェッチしようとしていますが、2つのエラーが発生しました:
"SyntaxError: Unexpected token < in JSON at position 0 .
Chromeまたは任意のブラウザの[ネットワーク]タブの応答で、実際のJSONデータではなくHTMLファイルを取得しました。
これが私の問題を解決した主な2つの理由です。
- JSONデータがJSONファイルで無効です。
- このためにJSONファイルが正しく読み込まれなかった可能性があるため、Reactサーバーを再起動するだけです。これは私の問題です。React内です。
直接実行に反応するか、srcフォルダーではなくパブリックフォルダーにアクセスします。
解決方法:
ファイルをパブリックフォルダに移動しましたが、アクセスはsrcフォルダの任意のファイルに直接アクセスできます。
Redux action.jsでREST呼び出しを行う:
export const fetchDummy = ()=>{
return (dispatch)=>{
dispatch(fetchDummyRequest());
fetch('./assets/DummyData.json')
.then(response => {
if (!response.ok) {
throw new Error("HTTP error " + response.status);
}
return response.json();
})
.then(result => {
dispatch(fetchDummySuccess(result))
})
.catch(function (err) {
dispatch(fetchDummyFailure(err))
})
}
}
答え :
解決策:
簡単に言うと、sエラーまたはs同様のエラーが発生した場合、それは{- code-3}1つだけ。そのis、コードバのsどこかs eで、有効なJSON形式が処理されることを期待していましたs s取得できませんでした。例:
var string = "some string";
JSON.parse(string)
エラーがスローされます、s aying
Uncaught SyntaxError:予期しないトークンs in JSON in po s ition 0
Becau s e、
string
i s{-code-のfirst文字3}
&it's現在有効なJSONではありません。 Thi sは、alsoの間にエラーをスローする可能性があります。のように:var invalidJSON ='{"foo": "bar"、 "mi s s edquotehere:" value "}'; JSON.par s e(invalidJSON)
エラーがスローされます:
VM598:1 Uncaught SyntaxError:予期しないトークンv in JSON at po s ition 36
because意図的にmissをJSONで引用符で囲んだstring
invalidJSON po sition36で。
それを修正した場合:
var validJSON ='{"foo": "bar"、 "mi s s edquotehere": "value"}'; JSON.par s e(validJSON)
JSONでオブジェクトを提供します。
これで、このsエラーは、任意の場所および任意のフレームワーク/ライブラリでスローされる可能性があります。ネットワークresponseを読んでいる可能性があります。これはsが無効なJSONです。したがって、デバッグのs tep s s i ssueは次のようになります。
curl
または呼び出している実際のAPIをヒットします。- re s pon s eをログに記録/コピーし、
JSON.parseとparseを試してください。エラーが発生した場合は、修正してください。
- そうでない場合は、sureコードをisにして、元のre s ponseを変更/変更しないようにします。
答え :
解決策:
POSTメソッドでフェッチAPIを使用してReactでAPIを呼び出しているときに、同じエラーが発生しました。
前:
fetch('/api/v1/tour',{
method:"POST",
headers:{"Content-type":"json/application"},
body:JSON.stringify(info)
})
.then((response)=>response.json())
.then((json)=>{
if(json.status === 'success')
alert(json.message)
else
console.log('something went wrong :(')
}).catch(e=>console.log(e))
ヘッダーを{"Content-type":"application/json"}
に変更してエラーを解決しました:
後:
fetch('/ api / v1 / tour'、{
メソッド: "POST"、
ヘッダー:{"Content-type":"application/json"}、
body:JSON.stringify(info)
})
.then((response)=> response.json())
.then((json)=> {
if(json.status ==='成功')
alert(json.message)
そうしないと
console.log('何かがうまくいかなかった:(')
})。catch(e => console.log(e))
答え :
解決策:
一般的なレベルでは、このエラーは、構文エラーが含まれているJSONオブジェクトが解析されたときに発生します。メッセージプロパティにエスケープされていない二重引用符が含まれている次のようなものを考えてみてください。
{
"data": [{
"code": "1",
"message": "This message has "unescaped" quotes, which is a JSON syntax error."
}]
}
アプリのどこかにJSONがある場合は、 JSONLint を実行して、構文エラーがないことを確認することをお勧めします。通常、これは当てはまりませんが、私の経験では、通常、原因であるAPIから返されるJSONです。
応答本文に無効なJSONを含むContent-Type:application/json; charset=UTF-8
ヘッダーを含む応答を返すHTTPAPIに対してXHRリクエストが行われると、このエラーが表示されます。
サーバー側のAPIコントローラーが構文エラーを不適切に処理していて、それが応答の一部として出力されている場合、返されるJSONの構造が壊れます。この良い例は、応答本文にPHPの警告または通知を含むAPI応答です。
<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%の確率でこれが問題の原因であり、他の回答ではここでいくらか取り上げられていますが、明確に説明されているとは感じませんでした。うまくいけば、これが役立つことを願っています。どのAPI応答にJSON構文エラーが含まれているかを追跡する便利な方法を探している場合は、そのためのAngularモジュールを作成しました。
モジュールは次のとおりです:
/**
* 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' );
} ] );
詳細については、上記のブログ記事をご覧ください。おそらくすべてが関連しているわけではないため、ここで見つかったすべてを投稿したわけではありません。
答え :
解決策:
他の回答で説明されているように、JSONの代わりに不正な形式のJSONまたはHTMLがこの問題の根本的な原因ですが、私の場合、このエラーを確実に再現できませんでした。サーバーが有効なJSONを返すこともあれば、HTMLエラーページなどを返すこともありました。
ページを完全に壊さないようにするために、返されたコンテンツを手動で解析し、他の誰かが解決するのに役立つ場合に備えて共有しようとしました。
const url = "https://my.server.com/getData";
fetch(url).then(response => {
if (!response.ok) return; // call failed
response.text().then(shouldBeJson => { // get the text-only of the response
let json = null;
try {
json = JSON.parse(shouldBeJson); // try to parse that text
} catch (e) {
console.warn(e); // json parsing failed
return;
};
if (!json) return; // extra check just to make sure we have something now.
// do something with my json object
});
});
これは明らかに問題の根本的な原因を解決するものではありませんが、問題をもう少し適切に処理し、失敗した場合に何らかの合理的なアクションを実行するのに役立ちます。
答え :
解決策:
このエラーの可能性は圧倒的です。
私の場合、問題の原因は package.json
にファイルされたhomepage
の追加であることがわかりました。
価値の確認: package.json
の変更:
homepage: "www.example.com"
から
hompage: ""
答え :
解決策:
将来のグーグル向け:
このメッセージは、サーバー側の機能がクラッシュした場合に生成されます。
または、サーバー側の関数が存在しない場合(つまり、関数名のタイプミス)。
つまり、GETリクエストを使用していて、すべてが完璧に見え、すべてをトリプルチェックしたとします...
もう一度GET文字列を確認してください。私のは:
'/theRouteIWant&someVar=Some value to send'
あるべきです
'/theRouteIWant?someVar=Some value to send'
^
CrAsH! (... 目に見えない、 on サーバー ...)
Node / Expressは、非常に役立つメッセージを送り返します。 Uncaught (in promise) SyntaxError: Unexpected token < in JSON at position 0
答え :
解決策:
私の問題は、適切なJSON形式ではない string
でデータを取得していたことでした。それを解析しようとしています。 simple example: JSON.parse('{hello there}')
はhでエラーを出します。私の場合、コールバックURLはオブジェクトの前に不要な文字を返していました: employee_names([{"name":....
そして0でeでエラーが発生していました。私のコールバックURL自体に問題があり、修正すると、オブジェクト。
答え :
解決策:
チュートリアルの後に同じエラーメッセージが表示されました。私たちの問題は、ajax呼び出しの「url: this.props.url」のようです。要素を作成するときのReact.DOMでは、私のものは次のようになります。
ReactDOM.render(
<CommentBox data="/api/comments" pollInterval={2000}/>,
document.getElementById('content')
);
そうですね、このCommentBoxの小道具にはURLがなく、データだけが含まれています。 url: this.props.url
-> url: this.props.data
を切り替えると、サーバーが正しく呼び出され、期待されるデータが返されました。
お役に立てば幸いです。
答え :
解決策:
これは古い可能性があります。しかし、それは角度で発生しただけで、リクエストとレスポンスのコンテンツタイプは私のコードでは異なっていました。したがって、ヘッダーを確認してください、
let headers = new Headers({
'Content-Type': 'application/json',
**Accept**: 'application/json'
});
Reactaxiosで
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)
});
},
答え :
解決策:
私の場合、エラーは戻り値を変数に割り当てなかったことが原因でした。次の原因でエラーメッセージが表示されました。
return new JavaScriptSerializer().Serialize("hello");
次のように変更しました:
string H = "hello";
return new JavaScriptSerializer().Serialize(H);
変数がないと、JSONはデータを適切にフォーマットできません。
答え :
解決策:
回答に追加するだけで、API応答に
が含まれている場合にも発生します。 <?php{username: 'Some'}
これは、バックエンドがPHPを使用している場合に発生する可能性があります。
答え :
解決策:
他の誰かがMozillaのWebAPIの「UsingFetch」ドキュメントからフェッチを使用している場合: (これは本当に便利です: 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 qr data = qr;
それは機能しました。
答え :
解決策:
コンソールでこのコード行を実行しようとした場合:
JSON.parse(undefined);
同じエラーメッセージが表示されます:
"SyntaxError: Unexpected token < in JSON at position 0"
したがって、アプリは無効なJSON undefined
を解析しようとしています。
答え :
解決策:
これに多くの時間を費やした後、私の場合、package.jsonファイルで「ホームページ」が定義されているためにアプリがFirebaseで機能しないことが問題であることがわかりました(同じ「トークン」エラー)。 create-react-appを使用してreactアプリを作成し、READ.meファイルのfirebaseガイドを使用してgithubページにデプロイし、ルーターが機能するために追加の作業を行う必要があることに気付き、firebaseに切り替えました。 githubガイドがpackage.jsonにホームページキーを追加し、デプロイの問題を引き起こしました。
答え :
解決策:
ヒント:ローカルのNode.jsサーバーでjsonをテストしますか?そのパスへのルーティングがまだないことを確認してください
'/:url(app|assets|stuff|etc)';
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。