2011-10-22 3 views
3

AJAX 요청을 통해 템플릿의 html을 보내려고합니다. JSONP를 사용하여 교차 원점 오류가 발생하지 않도록해야하지만 지금은 jsonp로 데이터 유형을 설정해야합니다. 결과적으로 아약스는 템플릿을 가져오고 "Uncaught SyntaxError : Unexpected token <"을 얻었고 console.log (data)를 얻을 때 "jQuery1640440755290677771_1319300298806"이 호출되지 않았습니다. 어떻게 underscore.js 템플릿을 사용할 HTML을 얻을 수 있도록 ajax 호출을 수정할 수 있습니까?JSONP을 통해 HTML을 보내는 방법

감사합니다.

$.ajax({ 
    url: "url", 
    cache: "false", 
    crossDomain:"true", 
    dataType: "jsonp", 
    beforeSend: function(xhr) { 
     xhr.setRequestHeader("Authorization", "f00"); 
    }, 
    success: function(html) { 
     console.log(html); 
    }, 
    error: function(data) { 
     console.log(data); 
    }, 

답변

0

전체 json을 jsonlint에 붙여 넣습니다. 예를 들어 html에 작은 따옴표를 사용해보십시오.

+0

JSON이 아니며 단순한 HTML 페이지입니다. 이것이 AJAX 호출로 불가능합니까? – user995469

+0

dataType을 jsonp로 설정하면 jsonp가 필요하고 html에 오류가 발생합니다. 그리고 dataType을 html로 설정하면 일부 브라우저에서는 원본 교차 오류 또는 보안 위반 오류가 발생합니다. 이 문제를 해결하기 위해 자체 백엔드 서비스를 작성해야합니다. – Lycha

0

dataType 속성의 list 옵션을 사용하십시오. 자세한 내용은 the docs을 참조하십시오. TL; DR은 datatype: "jsonp html"입니다. 그렇지 않으면 HTML이 아닌 JSON이 반환 될 것으로 예상됩니다.

HTML 콘텐츠를 JSON으로 래핑해야 할 가능성이 높지만, 이미 그렇게했을 수도 있습니다.

0

JSONP는 형식이다

이다
funcName({"key": "value"}) 

는 함수 호출 객체를 전달. HTML 템플릿을이 객체의 속성에 지정하면됩니다. 결과는 다음과 같아야합니다.

funcName({"template": "<p>Template</p>"}) 

그에 따라 서버를 설정해야합니다.


또 다른 옵션은 서버에서 Access-Control-Allow-Origin: * 응답 헤더를 설정하는 것 (다음 물론 Ajax 호출에서 데이터 형식으로 json을 지정하지 마십시오).

자세한 내용은 Cross-Origin Resource Sharing을 참조하십시오.

관련 문제