我试图通过AJAX请求发送模板的html,我需要使用JSONP来获取交叉原始错误,但是现在我需要将数据类型设置为jsonp。结果,ajax获取模板,我得到“Uncaught SyntaxError:Unexpected token<”当我在console.log(数据)时,我得到“jQuery1640440755290677771_1319300298806未被调用”。如何修复ajax调用以便我可以使用html for underscore.js模板来使用?
感谢。
$.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 :(得分:0)
将完整的json粘贴到jsonlint,看看是什么打破了它。例如,尝试在html上使用单引号。
答案 1 :(得分:0)
使用dataType
属性的list选项。有关详细信息,请参阅the docs,但TL; DR使用datatype: "jsonp html"
。否则,它会回来期待JSON,而不是HTML。
您可能需要将HTML内容包装为JSON,但您可能已经这样做了。
答案 2 :(得分:0)
JSONP的形式为:
funcName({"key": "value"})
即传递一个对象的函数调用。您所要做的就是将HTML模板分配给此对象的属性。结果应该是:
funcName({"template": "<p>Template</p>"})
您必须相应地设置服务器。
另一种选择是在服务器上设置Access-Control-Allow-Origin: *
响应头(然后当然不要在Ajax调用中将json
指定为数据类型)。
有关详细信息,请参阅Cross-Origin Resource Sharing。