というわけで、全ての原因がわかったー!のである?かも。
着地、JSONが壊れている?のが原因だった。
ていうか、
try{var json = JSON.parse(str);}catch(e){alert("dame-");}
て、やってなかったから、ハングアップしてたんだけども。
取りあえず、前回書いたUTF-8コードに置き換えて、
更にescape(responseText)して、WebViewにぶん投げて、
WebViewのjQueryで$("body").html(escapedJSON);ってして、結果を見てみた。
Stringが壊れてるってなって、どんなデータなのか把握も出来ない感じになるので、
そこが困った。
対処法としては、 items[i].access が今回変になるのを確認したので、
plusapi.js の
1023~1027行辺り の access{} をコメントアウトして、
1152行辺りに、activity.access.items.push();しているIFが3つあると思うんで、
そのIFを3つ全部コメントアウトしたら、取りあえず大丈夫になった。
でも、今一旦動くだけで、
なんか例外的に変なものが投げられたりすると、JSONパースエラー起こすかもなーとは思う。
細々書き直していたので、行数は目安で。
でも、この、activity.access.items.push() のところ、別に変になる理由ないんだけどなー。なんなんだろ?
わけが判らないなー。
オブジェクトの{ } がちゃんと閉じられてなかったんだよねぇ。謎。
前回だったか、Content-Length : body.length ってサーバ側でやってて、
クライアント側でresponseText.length ってやったときの、数字が違うことがあったりした。
xhr.onload = function(){
var contentLength = this.getResponseHeader("Content-Length")
var bodyLength = this.responseText.length;
Ti.API.info("contentLength - " + contentLength);
Ti.API.info("bodyLength - " + bodyLength);
}
Titanium側でこんなのやったんだけども。
うむー。わけがわからないなー。まぁ、とりあえず、一旦動くようになったので、報告でした。
全体的なまとめとしては、
サーバ側
server.js
・ res.header('Content-Length', body.length); をつける。
・ if (req.query.callback) {} をコメントアウトする(俺だけ)
plusapi.js
・ 前の記事の utf8ize() で全部の文字をUTF-8コードにしておいた(必要ないかも)
・ activity.access オブジェクトを全部削除してみた。
クライアント側
ちゃんとJSONは try{} のなかでパースしましょう。基本です。
こんな感じでした。
0 件のコメント:
コメントを投稿