2012-04-02 59 views
0
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加載不喜歡它。

請幫忙!

回答

2

兩個選項:

看來你需要轉義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

0

您不發送JSON內容。你必須添加這個頭文件:contentType:'application/json'

相關問題