【问题标题】:AJAX callbacks never called, not succes nor error从未调用 AJAX 回调,不是成功或错误
【发布时间】:2016-05-08 10:03:45
【问题描述】:
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 似乎工作正常,因为这些是我在浏览器中测试时得到的结果

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

【问题讨论】:

    标签: javascript jquery json ajax jsonp


    【解决方案1】:

    我发现有两件事不正确:

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

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

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

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

    【讨论】:

    • 我使用 jsonp 是因为我读过它是一种轻松绕过 cors 的方法。而且我不明白为什么将数据发送到响应标头我不知道如何解决这个问题。
    • @Joey 如果您需要绕过跨域边界,您可能应该使用 JSONP。数据是标题的一部分的原因是标题和正文数据之间应该有一个空行。这取决于您的服务器实现如何实现这一点,但它可以像在 JS 字符串前加上换行符一样简单。
    • 好的,所以一个问题修复了响应现在显示 json。我现在收到uncaught SyntaxError: Unexpected token ":"。仍然永远不会调用成功/错误。可能是因为语法错误?
    • 是的。您可能发送回一个 JSON 字符串,而不是调用回调函数的有效 JS 响应(请参阅我的回答)。
    猜你喜欢
    • 2023-03-17
    • 2014-07-31
    • 2012-07-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 2011-11-28
    相关资源
    最近更新 更多