使用GET请求发送数组

6
我将从Javascript向Python发起GET请求,并尝试传递一个二维数组,类似于以下内容:
[["one", "two"],["foo", "bar"]]

我正在尝试的代码如下,但是它并没有起作用。

在我的javascript代码中,我有一个类似上面的数组,然后像这样传递它

var xmlHttp = new XMLHttpRequest();
xmlHttp.open( "GET", "http://192.67.64.41/cgi-bin/hi.py?array=" + myArray, false );
xmlHttp.send( null );

然后在Python中我可以通过以下方式获取它

import cgi
form = cgi.FieldStorage()
array = form.getvalue("array")

但是它在Python中并不能正确输出,如果我要这样做的话:
print array[0]
#I get -> "o"
print array[1]
#I get -> "n"
print array[2]
#I get -> "e"

等等,但如果我想要的是

print array[0]
#output -> ["one", "two"]

我该如何实现这个目标?

谢谢。


@MarkoGrešak 是的,我可以更改它,只是不确定要更改成什么?但如果您能告诉我用JavaScript更好地将数据发送到Python的方法,那就太好了。 - spen123
这个回答可能是一个起点,你可以发送一个POST请求并将数据放在javascript请求体中。 如果您使用像[jQuery](http://jquery.com/)这样的库,那么使用`$.ajax`进行XMLHttpRequest会更容易。 对于后端框架,请选择Python网页上列出的[Web框架]之一。 在任何严肃的工作中,您都需要这些来提高生产力。 - Marko Gresak
@MarkoGrešak 好的,但是我还是不知道如何传递一个二维数组? - spen123
在发送之前,您可能需要使用JSON.stringify将其转换为json格式,然后在Python代码中解析回来。但我相信jQuery的$.ajax({url: 'http://192.67.64.41/cgi-bin/hi.py', data: myArray })会自动完成这个过程。 - Marko Gresak
@MarkoGrešak 好的,但我该如何发出GET请求?还是这个$.ajax({url: 'http://192.67.64.41/cgi-bin/hi.py', data: myArray })已经实现了呢? - spen123
显示剩余2条评论
1个回答

5

您不能直接将数组作为查询参数传递。您需要对数组进行迭代,并将其添加到URL字符串中,例如?array[]=one&array[]=two

const a = ['one', 'two']
let url = 'www.google.com'

for (let i = 0; i < a.length; i++) {
    // Check to see if the URL has a query string already
    if (url.indexOf('?') === -1) {
        url = `${url}?array[]=${a[i]}`
    } else {
        url = `${url}&array[]=${a[i]}`
    }
}

console.log(url)


那我必须分别传递每个字符串吗?就像 ?array[]=one&array[]=two&array[]=foo&array[]=bar 这样的形式?但是这样在 Python 中会变成一个数组吗? - spen123
您可以通过它们的键访问GET值,因此array[0]将等于one - Cjmarkham
好的,为了澄清一下,array[2] 应该是 foo 吗?有没有办法让它成为一个二维数组? - spen123
你可以通过构建查询字符串来实现,使得查询字符串读取 array[][]=bar。这将返回为 array[0][0] - Cjmarkham
@carl-markham:你还记得查询字符串不是无限的吗?你提出的方法可以工作,但我更倾向于直面问题,而不是屈服于数组。 - Dalen

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