何时在ajax调用中使用JSON.stringify()

3
我的ajax和JSON知识有限,但我知道在ajax调用中使用JSON.stringify有时是有用的。我下面有一个正常工作的ajax调用,而下面的带有stringify方法的调用却无法工作。我想知道我是否正确使用了stringify,如果没有,那么什么时候应该在ajax中使用JSON.stringify呢?我正在使用带有模型、视图和控制器的MVS。
这是我通常进行ajax调用的方式,并且如何构建url部分。
    function AddEquipment(id, name, type, description, email) {
        $.ajax({
            url: '@Url.Action("AddEquipment", "Home")' + '/?id=' + id +
                "&name=" + name + "&type=" + type + "&description=" +
                description + "&email=" + email,
            type: "GET",
            cache: false,
            datatype: "JSON",
            success: function(result) {
                //do stuff
            }
        });
    }

我尝试使用JSON.stringify代替手动构建整个URL,但它不起作用。

    function AddEquipment(id, name, type, description, email) {
        $.ajax({
            url: '@Url.Action("AddEquipment", "Home")',
            type: "GET",
            cache: false,
            datatype: "JSON",
            data: JSON.stringify({
                "id": id,
                "name": name,
                "type": type,
                "description": description,
                "email": email
            }),
            success: function(result) {
                //do stuff
            }
        });
    }

这个控制器方法接受一个整数类型的id,而其他所有内容都是字符串。我之前已经使用了JSON.stringify处理混合变量(整数、布尔和字符串),没有遇到问题。

非常感谢提供任何有用的信息。

谢谢!


3
我相信 jQuery 会为你完成繁重的工作...只需将数据作为对象传递-阅读文档以获取更多信息。 - Jaromanda X
你是否打开了开发者工具并查看了“网络”选项卡,以查看使用此JSON代码时实际的AJAX调用URL是什么? - Scott Marcus
JSON通常会通过POST方法发送,然后请求体中将包含数据。如果您想通过查询参数发送,则需要对其进行字符串化,然后使用encodeURIComponent进行编码。然后您可以在服务器端执行相反的操作。 - Keith
1
在这种情况下,根本不要使用 JSON.stringify。如果将 data 作为对象传递,则 jQuery 将正确地将其转换为查询字符串。如果传递字符串(例如 JSON),则预期该字符串已经处于正确的 key=value&k2=v2... 格式,而不是一个 JSON 字符串。 - Jonathan Kuhn
1个回答

5

这是两个不同的字符串(它们最终被评估为不相等)。Stringify 不会像您要求的那样产生 ' = '。

阅读此帖子以在 get 调用中传递数据。

JSON.stringify({
                "id": id,
                "name": name,
                "type": type,
                "description": description,
                "email": email
            }),

url: '@Url.Action("AddEquipment", "Home")' + '/?id=' + id +
                "&name=" + name + "&type=" + type + "&description=" +
                description + "&email=" + email 

实际上,它们根本不是对象。 - Bergi
@Bergi 是的,应该是字符串哦! :) 我说的是 url(无论最终是什么)和 JSON.stringify。 - Winter Soldier
如果你发现一个与当前问题相同的问题,你可以点击问题下方的旗帜链接,并将其标记为重复。 - Heretic Monkey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接