【问题标题】:jQuery Ajax PUT not firingjQuery Ajax PUT 未触发
【发布时间】:2013-05-04 17:49:27
【问题描述】:

以下 ajax 的工作方式与 Chrome 中宣传的完全一样。 HTTP PUT 用于触发将对象插入 RESTful API。

        $.ajax({
            type: "PUT",
            url: "/ajax/rest/team/create/",
            dataType: "json",
            processData: false,
            data: JSON.stringify(teamObject),
            success: function (response) {
                teamObject = response.object;
            }
        }); 

我注意到 jQuery API 文档很有帮助地告诉我 PUT 和 DELETE 可能有效,但不能保证在所有浏览器中都有效。比如我的问题。

遇到这样的问题,应该如何在客户端实现 RESTful API?

编辑:Firebug 告诉我 FF 确实在发出 PUT,但由于某些目前未知的原因,它在到达服务器之前就死了。重复一遍,这在 Chrome 中运行良好。

编辑:Fiddler 根本看不到 FF 尝试。 :(

【问题讨论】:

  • 有一个许多后端支持的标头(或者您可以扩展框架以支持它):X-HTTP-Method-Override。基本上它允许你制作例如POST 调用,但使其显示为 PUTDELETE 等。

标签: javascript jquery ajax spring rest


【解决方案1】:

我得到了以下工作。

var payload = JSON.stringify(teamObject)
syncHTTP('/ajax/rest/team/create/', 'PUT', payload);

function syncHTTP(url,method,payload) {
    var client = new XMLHttpRequest();

    client.open(method, url, false);
    client.setRequestHeader("Content-Type", "text/plain");
    client.send(payload);
}

我宁愿使用 jQuery,也不愿自己动手。 :|如果有人弄清楚了,只需添加一个答案,如果可行,我会接受。

谢谢。

【讨论】:

    【解决方案2】:
        $.ajax({
            type: "PUT",
            url: "/ajax/rest/team/create/",
            dataType: "json",
            contentType: "application/json",
            processData: false,
            data: JSON.stringify(teamObject),
            success: function (response) {
                teamObject = response.object;
            }
        }); 
    

    您需要添加 contentType。当 contentType 设置为 application/json jquery 时不要尝试从 JSON 字符串创建 JSON 对象,而是按原样发送 - 作为字符串。

    【讨论】:

    • 您能解释一下为什么您的更改可能会有所帮助吗?
    • @krun 下次发布一些澄清,而不是在这里粘贴代码
    • 您好,对不起,我没有解释它应该是什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    • 2016-05-09
    • 2011-09-30
    • 2011-03-25
    • 2012-05-04
    相关资源
    最近更新 更多