AJAX 从未调用过回调,既不成功也不出错

AJAX callbacks never called, not succes nor error

document.getElementById('myform').addEventListener('submit', function (e) {

// voorkomt de standaard actie van de submit
e.preventDefault();
$(function () {
    var artiest = document.getElementById("artiest");
    var rijen = document.getElementById("rij");
    var kolommen = document.getElementById("kolom");

    var CGIurl = 'http://localhost:8000/cgi-bin/schuifpuzzel.py?artiest=' + artiest.value +
        "&rijen=" + rijen.value + "&kolommen=" + kolommen.value  + "&callback=jsonp";

    $.ajax({
        type: 'GET',
        url: CGIurl,
        dataType: "jsonp",
        success: function(data){
            console.log(data)
        }

    });

});
});

我正在尝试 运行 这个 AJAX 在按下 提交按钮 时执行我的 CGI 脚本。所以我使用了 eventListenerpreventDefault.

GET 似乎工作正常,因为这些是我在浏览器中测试时得到的结果

响应 headers 中的 JSON 是我要检索的那个。 但是由于某种原因,调用了我的 AJAX 中的成功和错误,所以我无法访问 JSON.

我看到有两件事是不正确的:

  • JSON 响应数据在响应 headers 中发送,而不是响应 body;
  • jQuery 正在执行 JSONP 请求,这意味着响应应该是有效的 Javascript(不是 JSON),它应该调用提供的回调函数(如果没有调用,jQuery 将不知道请求已经完成,因此 successerror 回调都不会得到称为);

解决此问题取决于您是否需要 JSONP。如果不是,只需使用 json 作为数据类型并确保 JSON 数据在响应正文中。如果你确实需要 JSONP,你的 CGI 脚本应该提供一个有效的 JS 响应,它看起来像这样:

jQueryXXX({ "content" : { "size" : ... } });

(其中 jQueryXXX 应该是 callback 查询字符串参数的值)