MooTools 스크립트에서 AJAX 호출을 실행 중입니다. Firefox에서는 제대로 작동하지만 Chrome에서는 Uncaught SyntaxError: Unexpected token :
오류가 발생합니다. 이유를 알 수 없습니다. 나쁜 코드가 어디에 있는지 결정하기 위해 코드를 주석 처리하면 아무것도 반환되지 않습니다 .JSON이 반환되는 데 문제가 있다고 생각합니다. 콘솔을 확인하면 JSON이 반환되는 것을 볼 수 있습니다.
{"votes":47,"totalvotes":90}
문제가 없는데 왜이 오류가 발생합니까?
vote.each(function(e){
e.set('send', {
onRequest : function(){
spinner.show();
},
onComplete : function(){
spinner.hide();
},
onSuccess : function(resp){
var j = JSON.decode(resp);
if (!j) return false;
var restaurant = e.getParent('.restaurant');
restaurant.getElements('.votes')[0].set('html', j.votes + " vote(s)");
$$('#restaurants .restaurant').pop().set('html', "Total Votes: " + j.totalvotes);
buildRestaurantGraphs();
}
});
e.addEvent('submit', function(e){
e.stop();
this.send();
});
});
답변
빨간색 오류보기
잡히지 않은 구문 오류 : 예기치 않은 토큰 <
Chrome 개발자의 콘솔 탭에 응답 본문에 HTML이 표시되어 있습니다.
당신이 실제로보고있는 것은 <!DOCTYPE html>
서버에서 예기치 않은 최상위 라인에 대한 브라우저의 반응 입니다.
답변
같은 문제가있는 사람들을위한 참고 자료-서버를 JSON으로 다시 응용 프로그램 / json으로 보내야하고 기본 jQuery 핸들러가 정상적으로 작동했습니다.
답변
이것은 나에게 일어 났으며 그 이유는 위의 이유 중 하나가 아니 었습니다. jQuery 명령 getJSON callback=?
을 사용하고 JSONP를 사용하도록 추가 하고 (도메인 간 이동에 필요) JSON 코드를 반환 {"foo":"bar"}
하고 오류가 발생했습니다.
콜백 데이터를 포함시켜야했기 때문입니다. jQuery17209314005577471107_1335958194322({"foo":"bar"})
콜백없이 JSON을 사용하는 경우 성능이 저하되는 PHP 코드는 다음과 같습니다.
$ret['foo'] = "bar";
finish();
function finish() {
header("content-type:application/json");
if ($_GET['callback']) {
print $_GET['callback']."(";
}
print json_encode($GLOBALS['ret']);
if ($_GET['callback']) {
print ")";
}
exit;
}
희망적으로 그것은 미래에 누군가를 도울 것입니다.
답변
방금 문제를 해결했습니다. 표준 요청 호출에 문제를 일으키는 것이 있었으므로 이것이 대신 사용한 코드입니다.
vote.each(function(element){
element.addEvent('submit', function(e){
e.stop();
new Request.JSON({
url : e.target.action,
onRequest : function(){
spinner.show();
},
onComplete : function(){
spinner.hide();
},
onSuccess : function(resp){
var j = resp;
if (!j) return false;
var restaurant = element.getParent('.restaurant');
restaurant.getElements('.votes')[0].set('html', j.votes + " vote(s)");
$$('#restaurants .restaurant').pop().set('html', "Total Votes: " + j.totalvotes);
buildRestaurantGraphs();
}
}).send(this);
});
});
표준 Request 객체가 나에게 문제를주는 이유를 아는 사람이 있다면 알고 싶습니다.
답변
내 문제와 해결책을 목록에 추가 할 것이라고 생각했습니다.
나는 얻고있다 : Uncaught SyntaxError: Unexpected token <
그리고 오류는 내 아약스 성공 진술 에서이 줄을 가리키고 있었다 :
var total = $.parseJSON(response);
나중에 json 결과 외에도 PHP에 오류가 있기 때문에 응답과 함께 HTML이 전송되는 것을 발견했습니다. PHP에서 오류가 발생하면 거대한 주황색 테이블로 경고하도록 설정할 수 있으며 해당 테이블은 JSON을 버리는 것입니다.
console.log(response)
실제로 전송되는 내용을 확인하기 위해를 수행함으로써 그 사실을 알았습니다. JSON 데이터에 문제가있는 경우 console.log 또는 전송 된 내용과 수신 된 내용을 확인할 수있는 다른 명령문을 수행 할 수 있는지 확인하십시오.
답변
JSON 파일을 요청하면 서버는 JSON ( ) 대신 JavaScript Content-Type
헤더 ( text/javascript
)를 반환합니다 application/json
.
MooTools 문서 에 따르면 :
javascript content-type의 응답은 자동으로 평가됩니다.
결과적으로 MooTools는 JSON을 JavaScript로 평가하려고 시도 할 때 이러한 JSON을 평가하려고 시도합니다.
{"votes":47,"totalvotes":90}
자바 스크립트 해석기로서 취급 {
하고 }
대신 객체 표기법의 블록 범위로. 다음 “코드”를 평가하는 것과 같습니다.
"votes":47,"totalvotes":90
보시다시피, :
전혀 예상치 못한 것입니다.
해결책은 Content-Type
JSON 파일의 올바른 헤더 를 설정하는 것입니다 . .json
확장명으로 저장하면 서버가 자체적으로 수행해야합니다.
답변
귀하의 응답이 어떻게 든 평가되고있는 것 같습니다. Chrome에서 동일한 오류가 발생합니다.
var resp = '{"votes":47,"totalvotes":90}';
eval(resp);
이것은 중괄호 ‘{…}’가 자바 스크립트에서 코드 블록으로 해석되고 예상 한대로 객체 리터럴이 아니기 때문입니다.
JSON.decode () 함수를보고 거기에 평가가 있는지 확인하십시오.
비슷한 문제가 있습니다 :
Eval () = 예기치 않은 토큰 : 오류