Javascript 如果数据类型是JSON,为什么MIME类型是';application/json';被拒绝?

Javascript 如果数据类型是JSON,为什么MIME类型是';application/json';被拒绝?,javascript,jquery,ajax,json,Javascript,Jquery,Ajax,Json,我曾认为,如果将数据类型指定为JSON,那么jQuery将因此期待JSON响应。对吗?这一点似乎很清楚 在下面的函数中,我尝试了不指定任何数据类型(对于jQuery“智能猜测”),并显式地指定为JSON(如下所示) 两者都会导致 拒绝从[SNIP]执行脚本,因为其MIME类型(“应用程序/json”)不可执行,并且启用了严格的MIME类型检查 这个函数以前工作了几年,所以jQuery版本的更改或者从API服务器发送的头文件都会导致什么 如何调整以接受发送的MIME类型“application/j

我曾认为,如果将数据类型指定为JSON,那么jQuery将因此期待JSON响应。对吗?这一点似乎很清楚

在下面的函数中,我尝试了不指定任何数据类型(对于jQuery“智能猜测”),并显式地指定为JSON(如下所示)

两者都会导致 拒绝从[SNIP]执行脚本,因为其MIME类型(“应用程序/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'
    );
}
函数刷新(){
$.post($)https://api.example.com/api/v1/screenshot/create?callback=?',
{
“url”:”http://example.org/reports_scorecard_blank_HTMLMAKER.php?CTN='+$('#CTN').val(),
“数据类型”:“json”,
“大小”:“页面”,
“钥匙”:“我的钥匙在这里”,
“屏幕宽度”:1900,
“闪烁延迟”:0,
“延迟”:0,
“实例id”:65,
},
功能(远程、文本状态){
console.dir(远程);
console.log('textStatus'+textStatus);
if(远程错误){
间隔时间;
$(“#卡片制作”).hide();
$('#error').html(remote.error.show();
返回;
}
如果(textStatus!=“成功”){
setTimeout(函数(){refresh();},5*1000);
返回;
}
if(remote.queue==0){
$('#cardMaking').html('DONE!');
}
else if(remote.queue==1){
$(“#卡片制作”).html(“<1分钟”);
}
else if(remote.queue>1){
$('#cardMaking').html('<'+remote.queue+'minutes');
}
如果(remote.status=='finished'){
间隔时间;
$('#final_url').html(''+(remote.final_url |$('#url').val())+'');
$(“#摘要”).show();
link='SOME_HTML_HERE';
$('#cardMaking').html(链接);
//现在获取图像
$.post('reports\u scorecard\u blank\u IMAGE\u FETCHER.php',
{
“remote_id”:remote.id,
‘CTN’:$(‘CTN’).val()
},函数(数据){
log(“抓取器响应:+数据”);
}
);
}
}“json”
);
}

您在URL中包含了
回调=?
,它覆盖了所有其他内容,并导致jQuery发出JSONP GET请求,而不是XHR POST请求。

可能重复感谢您!知道为什么它像以前写的那样工作吗?另外,我刚才尝试将dateType指定为JSONP,但仍然得到相同的响应。我必须找到一种方法来摆脱URL中的回调吗?当然,您会得到相同的响应-通过放置callback=?在URL中,您隐式地将数据类型设置为jsonp。明确地设置它也不会有什么不同。如果您想发出一个非JSONP请求,那么是的,您必须去掉callback=?