使用Ajax post请求字符串数据而不是对象

3

类似于此问题,我需要发送一个字符串作为POST请求的数据。

与那个问题不同的是,我不能使用对象,因为我有重复的项。如您在我的示例数据中所看到的,sn1、sn2和sn3在不同的日期时间上多次重复。

示例数据:

&sn3=2013-2-4T12:43:52&sn3=2013-2-4T12:43:55&sn1=2013-2-4T12:43:59&sn1=2013-2-4T12:44:0&sn2=2013-2-4T12:44:0&sn3=2013-2-4T12:44:2&sn2=2013-2-4T12:44:3&sn3=2013-2-4T12:44:19&sn3=2013-2-4T12:44:19&sn3=2013-2-4T12:44:19&sn2=2013-2-4T12:44:19&sn3=2013-2-4T12:44:21&sn2=2013-2-4T12:44:22&sn2=2013-2-4T12:46:39&sn3=2013-2-4T12:46:42&sn2=2013-2-4T12:46:44&sn2=2013-2-4T12:46:45&sn2=2013-2-4T12:46:46&sn2=2013-2-4T12:47:27&sn2=2013-2-4T12:47:27&sn2=2013-2-4T12:49:44&sn2=2013-2-4T12:50:21&sn2=2013-2-4T12:52:21&sn2=2013-2-4T12:52:24&sn2=2013-2-4T12:57:35&sn3=2013-2-4T12:57:38&sn3=2013-2-4T12:57:39&sn2=2013-2-4T12:57:39&sn2=2013-2-4T12:57:40&sn3=2013-2-4T12:57:46&sn3=2013-2-4T13:21:30

我尝试使用以下方法:

console.log(screens); //logs my sample data posted above.
        $.ajax({
            url : url,
            type: "POST",
            dataType : 'text',
            data : screens,
            success : function(data) {
                console.log("sucessfull sending:")
                console.log(data);
            },
            error : function() {
                console.log('failed');
            }

        });

但它总是触发失败。

我可以将其作为字符串发送吗?如果不行,那么如何使用相同的键发送多个项?


3
调试器控制台中的网络选项卡是否显示错误?error 函数的返回参数中有什么错误?同时,将您的 error 函数更改为 error: function(jqXHR, textStatus, errorThrown),然后您可以在 errorThrown 中看到错误消息。 您还可以检查错误事件处理程序中的其他 2 个参数以获取更多信息。您收到的错误消息是什么? - Nope
我没有网络选项卡。我正在使用Phonegap进行开发,因此无法访问令人惊叹的调试控制台。由于我们采用了另一种解决方案,所以我没有费心记录所有内容!谢谢! - caiocpricci2
啊,我明白了。如果你将来需要的话,至少你可以利用错误处理程序参数。对不起,我没有意识到你在使用PhoneGap。 - Nope
1
可能是因为我没有提到它:)如果我在标签中加入phonegap,我只会得到通常回复的一半。你的评论非常有帮助,主要是因为我从未注意到控制台中有一个网络选项卡,它非常方便。我来自移动背景,而phonegap讨厌我。所以每一点帮助都很重要!谢谢! - caiocpricci2
3个回答

2
    console.log(screens); //logs my sample data posted above.
    $.ajax({
        url : url,
        type: "POST",
        dataType : 'text',
        data : {screens:screens},
        success : function(data) {
            console.log("sucessfull sending:")
            console.log(data);
        },
        error : function() {
            console.log('failed');
        }

    });

看看 data : {screens:screens},,如果你做这样的事情,在服务器上你就能像这样获取它:screensString = Request["screens"]。之后,screensString 将包含一个包含所有屏幕的字符串。


谢谢您的建议,这正是我所需要的。我将字符串中的 & 替换为 |,服务器现在可以分割并使用它了。 - caiocpricci2
嗯,如果我没有错过什么重要的东西,你应该能够像使用“|”一样使用“&”,而不需要进行任何替换。 - Viktor S.
可能。但是为什么要冒险呢?我确定我可以使用 | 。谨慎不会有错! - caiocpricci2

1
当您在ajax选项中不指定contentType时,您的请求将默认为'application/x-www-form-urlencoded; charset=UTF-8'。 然而,当您的post数据只是文本时,您应该通过指定contentType 'text'来让服务器意识到这一点。 与contentType相反,dataType指定您期望从服务器返回的响应数据类型。

那并没有解决问题,但我不知道 contentType 参数。谢谢。 - caiocpricci2

1
我认为您需要在参数中使用[]。
不要多次发送&sn3=(这是在重写自身),而应将其作为数组发送,如下所示:&sn3[]=
如果您从表单输入获取此数据,请使用name="sn3[]" ,如果是这种情况,建议您使用$('#yourform').serialize()发送数据。

+1,这也是一个好建议,但我们选择了另一个。服务器无论如何都必须解析字符串,这对客户端来说是额外的工作。 - caiocpricci2
请注意:[]的处理方式取决于服务器。在PHP中,您将获得一个漂亮的数组。在ASP.NET中,您将获得一个包含所有sn3 []值以|分隔的项目,就我所记得的而言。 - Viktor S.
顺便说一句,纠正你所说的(gameower),服务器将获得一个数组而不是一个字符串。谢谢。 - w3jimmy

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