如果dataType是JSON,为什么MIME类型' application / json'被拒绝了?

时间:2015-05-22 16:26:39

标签: javascript jquery ajax json

我原以为如果将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'
    );
}

1 个答案:

答案 0 :(得分:3)

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