programing

AJAX 호출 및 클린 JSON이지만 구문 오류: missing; before 문

closeapi 2023. 4. 1. 09:20
반응형

AJAX 호출 및 클린 JSON이지만 구문 오류: missing; before 문

다음 코드를 사용하여 크로스 도메인 JSONP 콜을 발신합니다.

jQuery.ajax({
        async: true,
        url: 'http://mnews.hostoi.com/test.json',
        dataType: 'jsonp',
        method: "GET",
        error: function (jqXHR, textStatus, errorThrown) {
            console.log(textStatus + ': ' + errorThrown);
        },
        success: function (data, textStatus, jqXHR) {
            if (data.Error || data.Response) {
                exists = 0;
            }
        }
    });

Firebug에서 디버깅할 때 다음 오류가 발생합니다.

여기에 이미지 설명 입력

SyntaxError: missing ; before statement

단, json 객체(JQ 코드의 링크를 통해 사용 가능)를 jsonlint.com 등의 툴을 통해 전달하면 유효한 JSON이라고 표시됩니다.그리고 이상 징후도 발견하지 못했습니다어떻게 구문 오류를 반환할 수 있습니까?JSONP의 상세 내용을 알 수 없는 건가요?

JSON 샘플

{"news":[ {
  "sentences": [
    "Neuroscientists have discovered abnormal neural activity...", 
    "The researchers found that these mice showed many symptoms...", 
    "\"Therefore,\" the study authors say, \"our findings provide a novel.."
  ], 
  "summaryId": "ZJEmY5", 
  "title": "Abnormal neural activity linked to schizophrenia"
}]}

잘 부탁드립니다.

JSONP는 JSON이 아닙니다. JSONP 응답은 하나의 인수(JSON 구문을 준수하는 JavaScript 객체 리터럴)를 가진 함수 호출만 포함하는 JavaScript 스크립트로 구성됩니다.

응답은 JSONP가 아닌 JSON이므로 JSONP로 처리하려고 하면 실패합니다.

바꾸다dataType: 'jsonp'로.dataType: 'json'(혹은 행 전체를 삭제하면 서버가 올바른 콘텐츠유형을 발행하므로 덮어쓸 필요가 없습니다).

스크립트는 JSON과는 다른 오리진에서 실행되므로 JSON을 제공하는 호스트를 제어해야 하는 절차(전부는 아니지만 대부분)도 수행해야 합니다.

이 에러는 JSONP가 아닌 JSON을 반환하고 있기 때문입니다.

원래 JSONP는

someCallBackString({ The Object });

다음은 작업 예시입니다.

$.ajax({
 type: 'GET',
 url: 'http://xxx.amazonaws.com/file.json',
 dataType: 'jsonp',
 jsonpCallback: 'callback',
 success: function(json){
   console.log(json);
 }
});

그리고 넌 이걸callback의 초기에file.json예를 들어 다음과 같습니다.

callback({"item":{".......

epascarello가 지적한 바와 같이 JSONP 응답은 다음과 같이 전송되어야 합니다.

callBackFunction({ JSON Object })

그 후, 다음과 같이 발신자 기능을 설정할 수 있습니다.

var url =  "http://someremoteurl.com/json";
    $.getJSON(url + "?callback=?", null, function(data) {
    callBackFunction(data);
});

그런 다음 다음과 같이 응답 데이터를 루프할 수 있습니다.

function callBackFunction(data)
{
   console.log(data);
}

"callback=?" 매개 변수를 사용하는 경우 서버 측의 응답은 다음과 같습니다.

$_callback = $_GET['callback'];    
echo $_callback . '(' . json_encode(YOUR_VARIABLE) . ');';

"callback=?" 매개 변수가 정의되지 않은 경우 응답은 다음과 같습니다.

echo '[' . json_encode($_return_array) . ']';

질문이 Ruby와 관련된 경우 컨트롤러에서 포맷을 올바르게 렌더링했는지 확인합니다.예:

def view_product
   data = Product.find params[:id]
   render :json =>  data, :callback => params[:callback]
end

렌더 방식에서는 :callback 파라미터를 지정해야 합니다.그렇지 않으면 jsonp 대신 json으로 렌더링됩니다.

언급URL : https://stackoverflow.com/questions/19456146/ajax-call-and-clean-json-but-syntax-error-missing-before-statement

반응형