[javascript] 캐치되지 않는 구문 에러 : 예기치 않은 토큰 :

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-TypeJSON 파일의 올바른 헤더 를 설정하는 것입니다 . .json확장명으로 저장하면 서버가 자체적으로 수행해야합니다.


답변

귀하의 응답이 어떻게 든 평가되고있는 것 같습니다. Chrome에서 동일한 오류가 발생합니다.

var resp = '{"votes":47,"totalvotes":90}';
eval(resp);

이것은 중괄호 ‘{…}’가 자바 스크립트에서 코드 블록으로 해석되고 예상 한대로 객체 리터럴이 아니기 때문입니다.

JSON.decode () 함수를보고 거기에 평가가 있는지 확인하십시오.

비슷한 문제가 있습니다 :
Eval () = 예기치 않은 토큰 : 오류