Tag: JavaScript



2010年 2月 6

location.URLなどから取得するのではなく、例えば下記ページのような事を行う関数。

javascriptでURLクエリで、変数を受け取ることはできないでしょうか?
http://q.hatena.ne.jp/1179844292

<script src=”sample.js?key1=value1&key2=value2″></script>

などでクエリー(Javascriptではそう呼ばない??)を取得する。
注意点としては日本語等マルチバイトの文字をvalueにセットするには、URLエンコードしないとだめかも。
(呼び出し元のHTMLがUTF-8だとうまくいったけど。。。)

var getQueryStrings = function (){

    // scriptタグからリクエストされたURIを取得し、クエリー(?以降の部分)を抜き出す
    var script = document.getElementsByTagName( 'script' );
    var request = script[script.length-1].src;
    var query =( request.match(/\?(.+)$/) )[1]; //配列に代入されるため[1]の要素を代入

    //
    var pairs = query.split(/&/);
    var form={};
    for (var i in pairs){
        var val = pairs[i].split(/=/);
        form[decodeURI(val[0])] = decodeURI(val[1]);
    }
return form;
};

使い方は
var form = getQueryStrings();
とするとform にハッシュとして代入される。

form[“key1”]やform[“key2”]のように。
だいたい form.key1 form.key2 でも大丈夫だと思うけど、key1が数字の場合うまくいかないので注意。
例)sample.js?1=val1&2=val2

なんでこんな事するのかというと、以前はCGIでJavascriptを書き出していたので perl.cgi?k=aaa&〜 と、していた。そのスクリプトをJavascriptとして置き換えるのにURIの変更を(ほぼ)せずに行いたかったので。
こうしないとパラメーターを渡すのにscriptタグの変更が必要なので。


Filed under: JavaScript

Trackback Uri






2009年 8月 24

IEでだけ動作しない事が多いようなのでメモ

JSON(JSONP)で

name(
    {
      'data' :[
                    ['あいう','せそ'],
                    ['かきく','けこ'],
                    ['さしす','せそ']
              ]
    }
);

こんな感じのものを使おうとすると
‘]’がありませんというようなエラーが出る。

cgi等スクリプトで出力する場合はレスポンスヘッダを明示的に指定する必要がある。

perlなら

print “Content-type: application/json; charset=UTF-8;\n\n”;

のように。

charsetは’utf8‘ではダメで’UTF-8‘か’utf-8‘とハイフンが必要のようだ。

Content-typeも application/json とするのが良いらしい。

参考:

追記:

どうやら呼び出す時に<script>タグで指定すれば(静的ファイルでも)動作する模様。
動的に育成しない場合はレスポンスヘッダの付加は難しいし使えるかも。


例)<script type=”text/javascript” src=”../json.js” charset=”utf-8″></script>

この場合、type は text/javascript でのみ動作した。(win XP,IE8)
application/json や application/javascript では動作しなかった。


Filed under: JavaScript

Trackback Uri