Javascript 在Python服务器上处理JSON对象会导致“list”对象没有属性“read”错误

Javascript 在Python服务器上处理JSON对象会导致“list”对象没有属性“read”错误,javascript,python,json,Javascript,Python,Json,我有javascript代码,可以提取数据并创建JSON对象发送到服务器 for (i=0;i<selected.length;i++) { if (selected[i].value == "available") { //Add item to the selectedjsonObj list //alert("The new select ID is: " + selected[i].text); selectedjso

我有javascript代码,可以提取数据并创建JSON对象发送到服务器

for (i=0;i<selected.length;i++)
{
    if (selected[i].value == "available")
    {
        //Add item to the selectedjsonObj list
        //alert("The new select ID is: " + selected[i].text);
        selectedjsonObj[selected[i].text] = selected[i].text;
        selected[i].value = "selected";
        selectedChange++;
    }
}

for (i=0;i<available.length;i++)
{
    if (available[i].value == "selected")
    {
        //Add item to the availablejsonObj list
        //alert("The new available ID is: " + available[i].text);
        availablejsonObj[available[i].text] = available[i].text;
        available[i].value = "available";
        availableChange++;
    }
}
var xmlhttp;

if (window.XMLHttpRequest)  {  
// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
}
else {
// code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
    if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
        document.getElementById("title_msg").innerHTML=xmlhttp.responseText;
        // var el = document.getElementById('userid_msg');
        if (xmlhttp.responseText=="Updated") {
            document.getElementById("title_msg").innerHTML=xmlhttp.responseText;
        }
        else {
            alert("An error occurred saving your changes.  Please refresh the page and try again.");
            document.getElementById("title_msg").innerHTML=xmlhttp.responseText;
        }
    }
}
var x=document.forms["cohort"]["title"].value;
if (selectedChange && availableChange) {
    xmlhttp.open("GET","/update/cohortfriends?a=" + JSON.stringify(availablejsonObj) + "&s=" + JSON.stringify(selectedjsonObj) + "&t=" + x, true);
    xmlhttp.send();
}
if (selectedChange) {
    xmlhttp.open("GET","/update/cohortfriends?s=" + JSON.stringify(selectedjsonObj) + "&t=" + x, true);
    xmlhttp.send();
}
if (availableChange) {
    xmlhttp.open("GET","/update/cohortfriends?a=" + JSON.stringify(availablejsonObj) + "&t=" + x, true);
    xmlhttp.send();
}
document.getElementById("save_cohort_friends").innerHTML="No Changes";
获取的a-“list”对象没有属性“read”-错误

删除了_friends=json.loadself.request.get_alla语句


由于我是python和javascript新手,并且是自学成才的,我确信我在做一些概念上错误的事情。感谢所有帮助。

来自文档:

loadfp,cls=None,object\u hook=None,parse\u float=None,parse\u int=None, 解析_常量=无,对象_对_钩子=无,**千瓦 反序列化fp a.read支持文件,如包含 将JSON文档转换为Python对象

因此,json.load需要的是一个类似文件的对象,而不是一个列表,request.get\u all返回该对象。

您给json.load一个列表,这会导致此错误

此外,请使用json.load而不是json.load

试试这个:

info = json.dumps(self.request.get_all("a"))
removed_friends = json.loads(info)
get_all函数返回查询字符串参数a的所有值。因为您只有一个a,所以应该使用get。另外,使用json.loads将字符串解析为json

removed_friends = json.loads(self.request.get("a"))
#                     here ^       and here ^

request.get_all提供了一个列表,该列表不是json.load的有效参数。您将需要迭代该列表并分别处理其中的每个元素。我想这就是为什么我必须添加[0]来处理我的参数。谢谢大家的快速回复。这些回答不仅解决了我的问题,还澄清了我的一些糊涂想法。现在我需要清理一些其他代码。再次感谢。
removed_friends = json.loads(self.request.get("a"))
#                     here ^       and here ^