【问题标题】:{"error": "Please use POST request"} - alternative solution to submitting a form{"error": "请使用 POST 请求"} - 提交表单的替代解决方案
【发布时间】:2015-04-28 09:45:01
【问题描述】:

我正在做一个学校项目,并试图创建一个可以在以下链接中找到的计算器:

http://jsfiddle.net/ae97vgxz/2/

而我的 JS 是:

$(document).ready(function(){

// Setup variable as empty
var method = "";

// Detect when initial radio button is clicked
$("input[type=radio]").click(function() { 

    // Get the weight from the input box
    var weight = $("#meatWeight").val();

    // If the water method was clicked
    if ($(this).hasClass("water")) {
        var method = weight * 60;
        // Show me what the value is (can be removed)
        alert(method);

    // If the fridge method was clicked
    } else if ($(this).hasClass("fridge")) {
        var method = weight * 793;
        // Show me what the value is (can be removed)
        alert(method);
    }
});

使用时,如果先输入重量,再选择解冻方式,会在提示窗口中得到正确答案。但是,如果您按下“计算”按钮,您会收到以下消息 -

{"error": "Please use POST request"}

通过我自己的一些研究,我相信这是因为我正在尝试提交表单,而 JSFiddle 不允许您这样做。如果我在 Chrome 中尝试本地环境,再次没有输出。

我的 JS 知识非常有限(我相信你可以看到),所以我无法找到解决方案。谁能建议我做错了什么以及解决方案可能是什么?

谢谢!

【问题讨论】:

  • return false; 如果之前有任何运行时错误将不起作用。在您的 JSFiddle jsfiddle.net/ae97vgxz/2 中,defrost 函数使用未定义的变量 method。然后我发现amethod是在$(document).ready的回调函数范围内定义的。更重要的是,weight 变量根本没有被使用。我想知道是这样吗?

标签: javascript forms jsfiddle onsubmit


【解决方案1】:

你这里有一个错误:

function defrost(weight) {
    return (makeTime(method));
}

应该是:

function defrost(weight) {
    return (makeTime(weight));
}

另外,您应该更改 makeTime 函数,否则它将不起作用。 parseInt 子句应该是这样的:

parseInt(time / 60);

【讨论】:

    【解决方案2】:

    您当前提交表单的方法是 GET

    <form id="defrostCalculator" name="defrostCalculator" onsubmit="callbackDefrost(this.elements.meatWeight.value); return false;" method="GET">
    

    如果目的地需要 POST,请使用 POST。

    <form ... method="POST">
    

    【讨论】:

    • 这与 GET 或 POST 无关。他根本不想提交表单。
    • 大家好 - 老实说,我很困惑,我不知道我想要什么以及最好的解决方案是什么。但是,通过遵循您的建议,我相信我正朝着正确的方向前进 - 现在表格输出:'NaN hrs and NaN mins' - 所以我想我错过了其他东西 - 但至少我想我'我朝着正确的方向前进....非常感谢,两个:)
    • 顺便说一句 - 这里是更新的 JS fiddle - jsfiddle.net/09tfow5v/13 - 它现在输出但它似乎总是'2分钟'......
    【解决方案3】:

    您的代码有几个小问题。但是,您遇到的主要问题是,如果您想在 jsfiddle 上使用非 AJAX 表单,则必须更改所有按钮以具有该属性:

    type="button"
    

    而不是你目前拥有的:

    type="submit"
    

    当您执行&lt;input type="submit" 时,jsfiddle.net 会发出声音并失败,因为您无法将表单信息提交到他们的服务器。幸运的是,您不需要任何 AJAX 或服务器交互。所以你的简单计算器可以只使用简单的按钮。

    【讨论】:

      猜你喜欢
      • 2018-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 2018-05-16
      • 2019-08-26
      • 2014-09-25
      相关资源
      最近更新 更多