2011-10-22 36 views
3

我想通過AJAX請求發送模板的html,我需要使用JSONP不會得到交叉原點錯誤,但現在我需要將數據類型設置爲jsonp。結果,ajax獲取模板,我得到「Uncaught SyntaxError:意外的令牌<」,當我console.log(數據)我得到「jQuery1640440755290677771_1319300298806未被調用」。我如何修復ajax調用,以便我可以使用我的html來使用underscore.js模板?如何通過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屬性的列表選項。詳情請參閱the docs,但TL; DR使用datatype: "jsonp html"。否則,它將會期待返回JSON,而不是HTML。

您可能需要將HTML內容封裝爲JSON,但您可能已經這樣做了。

0

JSONP是以下形式:

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

即,函數調用傳遞對象。你所要做的就是將你的HTML模板分配給這個對象的一個​​屬性。結果應該是:

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

您必須相應地設置您的服務器。


另一種辦法是在你的服務器設置Access-Control-Allow-Origin: *響應頭(然後當然不指定json作爲Ajax調用的數據類型)。

有關更多信息,請參閱Cross-Origin Resource Sharing