我原以为如果将dataType指定为JSON,则jQuery因此需要JSON响应。那是对的吗? http://api.jquery.com/jquery.ajax/似乎很清楚。
在下面的函数中,我尝试不指定dataType(对于jQuery" Intelligent Guess")并明确指定为JSON(如下所示)。
两者都导致了 "拒绝从[SNIP]执行脚本,因为它的MIME类型(' application / json')不可执行,并且启用了严格的MIME类型检查。"
此函数以前工作了几年,所以jQuery版本更改或从API服务器发送的标头必须导致?
如何调整发送的MIME类型' application / json'被接受了?
function refresh() {
$.post('https://api.example.com/api/v1/screenshot/create?callback=?',
{
'url': 'http://example.org/reports_scorecard_blank_HTMLMAKER.php?CTN=' + $('#CTN').val(),
'dataType': "json",
'size': 'page',
'key': 'MY_KEY_HERE',
'screen_width': 1900,
'flash_delay' : 0,
'delay' : 0,
'instance_id' : 65,
},
function(remote, textStatus) {
console.dir(remote);
console.log('textStatus '+textStatus);
if (remote.error) {
clearInterval(interval);
$('#cardMaking').hide();
$('#error').html(remote.error).show();
return;
}
if (textStatus != 'success') {
setTimeout(function() { refresh(); }, 5 * 1000);
return;
}
if (remote.queue == 0) {
$('#cardMaking').html('DONE!');
}
else if (remote.queue == 1) {
$('#cardMaking').html('< 1 minute');
}
else if (remote.queue > 1) {
$('#cardMaking').html('< ' + remote.queue + ' minutes');
}
if (remote.status == 'finished') {
clearInterval(interval);
$('#final_url').html( '<i>' + (remote.final_url || $('#url').val()) + '</i>');
$('#summary').show();
link = 'SOME_HTML_HERE';
$('#cardMaking').html(link);
// now fetch image
$.post('reports_scorecard_blank_IMAGE_FETCHER.php',
{
'remote_id': remote.id,
'CTN': $('#CTN').val()
}, function(data) {
console.log("Fetcher response: " + data);
}
);
}
}, 'json'
);
}
答案 0 :(得分:3)
你在URL中包含了callback=?
,它覆盖了其他所有内容,并导致jQuery发出JSONP GET请求而不是XHR POST请求。