【问题标题】:jQuery ajax() success data - retrieving object results from Python serverjQuery ajax() 成功数据 - 从 Python 服务器检索对象结果
【发布时间】:2015-06-10 16:38:10
【问题描述】:

我试图在来自 Python 服务器 (GAE) 的 jQuery ajax 函数之后显示成功数据。我可以让它使用单个字符串或数字作为成功数据,但我想在 ajax 调用中从服务器中继几条信息。我在想最好的方法是将数据存储在 Python 对象中,然后在回调中发送对象。对象显示为“”,但对象属性显示为“未定义”。
非常感谢您提供的任何建议-

Javascript:

        $.ajax({
            type: "POST",  
            url: "/update_cart",  
            data: {'item1': item1, 'item2': item2, 'item3': item3}, 
            //dataType: 'jsonp',                
            success: function(data) {   
                    $("#amount").val(data.total);         $("#shopping_cart_count").text(data.cart_item_count);
                    alert(data);    //displays "<main.ajaxObject object at 0x042C8890>"
                    alert(data.cart_item_count);    //displays "undefined"                  
                }        
        });

Python 代码:

    data = ajaxObject() 
    data.cart_item_count = 5  
    data.total = 10 

    logging.info("*****data.cart_item_count %d ******"  % data.cart_item_count )    #displays correctly 
    logging.info("*****data.total %d ******"  % data.total )  #displays correctly   

    self.response.out.write(data);  #respond to ajax success with data object

【问题讨论】:

  • self.response.out.write()中尝试JSON编码json.dumps(data)
  • Shaunak,我将“self.response.out.write()”更改为“self.response.out.write(json.dumps(data));” (和导入的 json)并收到此错误:TypeError: is not JSON serializable

标签: jquery python ajax google-app-engine ajaxform


【解决方案1】:

您需要像 Shaunak D 描述的那样对数据进行 JSON 编码。您收到的错误是告诉您 json 包不知道如何将您的 ajaxObject 实例编码为字符串。

您可以使用自定义 JSON 编码器来解决此问题,详见 https://docs.python.org/2/library/json.html(“扩展 JSONEncoder”部分)

或者(并且更容易),您可以只使用字典来表示您的数据:

data = {
    'cart_item_count': 5,
    'total': 10
}
self.response.out.write(json.dumps(data))

jQuery 的 ajax 函数应该自动将 JSON 字符串解码为 Javascript 对象。

【讨论】:

  • 完美运行!我使用了字典方法。另外,我在 ajax 函数中添加了“dataType:'json'”——否则它仍然将接收到的字典显示为“未定义”——谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 2011-11-18
  • 1970-01-01
  • 2011-10-23
  • 2010-10-18
相关资源
最近更新 更多