एक रिएक्ट एप्लिकेशन घटक में जो फेसबुक जैसी सामग्री फ़ीड को संभालता है, मैं एक त्रुटि में चल रहा हूं:
Feed.js: 94 अपरिभाषित "पारसेररोर" "सिंटैक्सएरोर: अनपेक्षित टोकन <स्थिति JSON में 0 पर
मैं एक ऐसी ही त्रुटि में भाग गया जो रेंडर फ़ंक्शन के भीतर 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 डेटा खींचने के साथ कुछ करने के लिए प्रतीत होती है, मैंने एक रिक्त db से शुरू करने की कोशिश की, लेकिन त्रुटि बनी रहती है। त्रुटि को अनंत लूप में कहा जा सकता है क्योंकि संभवतः रिएक्ट सर्वर से जुड़ने की कोशिश करता है और अंततः ब्राउज़र को क्रैश कर देता है।
संपादित करें:
मैंने Chrome देव टूल और Chrome REST क्लाइंट के साथ सर्वर प्रतिक्रिया की जाँच की है, और डेटा उचित JSON प्रतीत होता है।
संपादित करें 2:
ऐसा प्रतीत होता है कि यद्यपि इच्छित एपीआई एंडपॉइंट वास्तव में सही JSON डेटा और प्रारूप लौटा रहा है, लेकिन रिएक्ट http://localhost:3000/?_=1463499798727
अपेक्षित के बजाय मतदान कर रहा है http://localhost:3001/api/threads
।
मैं बैकएंड डेटा को वापस करने के लिए पोर्ट 3001 पर चल रहे एक्सप्रेस ऐप के साथ पोर्ट 3000 पर एक वेबपैक हॉट-रीलोड सर्वर चला रहा हूं। यहाँ निराशा की बात यह है कि पिछली बार जब मैं इस पर काम कर रहा था तो यह सही ढंग से काम कर रहा था और मैं इसे तोड़ने के लिए जो संभवत: बदल सकता था वह नहीं मिला।
JSON.parse("<foo>")
- एक JSON स्ट्रिंग (जिसकी आप अपेक्षा करते हैं dataType: 'json'
) के साथ शुरू नहीं हो सकती है <
।
NODE_ENV
। इसे देखें: github.com/facebookincubator/create-react-app/blob/master/…