無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

json.jsをインポートすると、Ajax.Requestでエラーになる。

json.jsprototype.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]);
>       }
>     }