没有JSON对象可以被解码 - RPC POST调用

没有JSON对象可以被解码 - RPC POST调用

问题描述:

var body = JSON.stringify(params); 

// Create an XMLHttpRequest 'POST' request w/ an optional callback handler 
req.open('POST', '/rpc', async); 

req.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
req.setRequestHeader("Content-length", body.length); 
req.setRequestHeader("Connection", "close"); 

if (async) { 
    req.onreadystatechange = function() { 
    if(req.readyState == 4 && req.status == 200) { 
     var response = null; 
     try { 
     response = JSON.parse(req.responseText); 
     } catch (e) { 
     response = req.responseText; 
     } 
     callback(response); 
    } 
    }; 
} 

// Make the actual request 
req.send(body); 

----在服务器端----没有JSON对象可以被解码 - RPC POST调用

class RPCHandler(BaseHandler):   
'''@user_required''' 
def post(self): 
    RPCmethods = ("UpdateScenario", "DeleteScenario") 
    logging.info(u'body ' + self.request.body) 
    args = simplejson.loads(self.request.body) 

----获取对服务器日志以下错误 身体%图5B%22UpdateScenario%22%2C%22C%22%2C%224.5%22%2C%2230frm%22%2C%22Refinance%22%2C%22100000%22%2C%22740%22%2C%2294538%22%2C% 2250000%22%2C%22%22%2C%22%22%2C%22Fremont%22%2C%22CA%22%5D =

没有JSON对象可以被解码:行1列0(char 0) 回溯(最近的通话最后): 文件“/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/_webapp25.py”,行703,在调用 handler.post(* groups) 文件“/ base/data/home/apps/s〜mortgageratealert-staging/1.357912751535215625/main.py“,第418行,后 args = json.loads(self.request.body) 文件”/ base/python_runtime/python_lib/versions/1/simplejson/初始化 py”为,线388,在负载 回报_default_decoder.decode(S) 文件 “/base/python_runtime/python_lib/versions/1/simplejson/decoder.py”,线路402,在解码 OBJ, end = self.raw_decode(s,idx = _w(s,0).end()) 文件“/ base/python_runtime/python_lib/versions/1/simplejson/deco der.py”,线420,在raw_decode 提高JSONDecodeError( “否JSON对象可以被解码”,S,IDX) JSONDecodeError:否JSON对象可以被解码:第1行第0列(CHAR 0)

- - 萤火显示以下---

参数应用程序/ x-WWW窗体-urlencoded [ “UpdateScenario”, “C”, “4 ....
源 [” UpdateScenario “” C “,”4.5“,”30frm“,”再融资“,”100000“,”740“,”94538“,”50000“,”所有者“,”sfr“,”Fremont“,”CA“]

根据萤火虫报告和日志如预期显示self.request.body。然而simplejson加载不喜欢它。

请帮忙!

两个选项:

看来你需要转义self.request.body的内容。

进口urllib而改变的代码的最后一行的样品中:

args = simplejson.loads(urllib.unquote(self.request.body))

或者你可以试试这个另一种选择:您要发送的POST体完整JSON字符串。您可能不需要有下面一行在你的JavaScript:

req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

把它拿出来,看看你仍然需要使用上述urllib.unquote解决方案。

+0

谢谢!两个选项都有效。 – user1307067 2012-04-03 01:42:33

+0

不客气。请点击左侧“复选标记”旁边的“0”标记正确的答案。 :} – Albert 2012-04-03 01:46:46

您不发送JSON内容。你必须添加这个头文件:contentType:'application/json'