json.jsをインポートすると、Ajax.Requestでエラーになる。
json.jsとprototype.jsを両方インポートするとAjax.Requestでサーバーと通信する際に以下のエラーが発生します。
[Exception... "Component returned failure code: 0x80070057 (NS_ERROR_ILLEGAL_VALUE) [nsIXMLHttpRequest.setRequestHeader]" nsresult: "0x80070057 (NS_ERROR_ILLEGAL_VALUE)" location: "JS frame :: xxx/prototype.js :: anonymous :: line 1098" data: no]
エラーの発生を確認したバージョンは以下のとおり。
ライブラリ | バージョン |
---|---|
prototype.js | 1.5.11 |
json.js | 2007-07-03版 |
原因
json.jsでObjectクラスに関数(toJSONString())が追加されていて、protorype.js内でそれを想定していない部分があることが原因。
対策
対策としては次の2つがあります。
- json.jsを編集し、ObjectのprototypeへのtoJSONString(138〜178行目)をコメントアウトする。
- ×オブジェクトのtoJSONString()は当然使えなくなります。
- prototype.jsの問題の部分を修正。1098行目あたりを以下のように修正します。
※'<'の行を削除 / '>'の行を追加。 < for (var name in headers) < this.transport.setRequestHeader(name, headers[name]); --- > for (var name in headers) { > if ( typeof headers[name] == "string" ) { > this.transport.setRequestHeader(name, headers[name]); > } > }