0

関数内で、そのパラメーターの名前/値を取得できますか?

それらをJSON.stringify()できるオブジェクトに変換して、データとしてajax呼び出しに渡すことができるようにしたいと考えています。

[編集]正しい方向を示してくれた他の人のおかげで、webmethodに一致するパラメーターとwebmethodに一致するクライアントスタブを動的に作成するソリューションがあります。これは、物事をより読みやすくするのに役立つと思います。

[編集2]さらに一歩進んだ。ここで、javascriptの関数名はwebmethodの名前と一致する必要があります。次に、webmethodが存在するページを最初のパラメーターとして関数に渡します。それは動的にクライアントのjavascript関数名を取ります、そしてそれはそれがwebmethodのために今探しているものです。

コードのどこかに作成する一般的なメソッドは次のとおりです。

    function WebMethodCall(args) {
        // in your stubs call this to get argname/value pairings in JSON form
        var params = JSONArgs(args);
        var fun = GetFunctionName(args);

        // make a call to the webmethod via ajax using json
        AjaxPostJSON(args[0] + "/" + fun, params, args);
    }

function JSONArgs(args) {
        var tmp = args.callee.toString().match(/\(.*?\)/)[0];
        var argumentNames = tmp.replace(/[()\s]/g, '').split(',');

        var param = new Object();
        for (var i = 0; i < argumentNames.length; i++) {
            param[argumentNames[i]] = args[i];
        }

        return JSON.stringify(param);
    }

    function GetFunctionName(args) {
        var fName = args.callee.toString().match(/function ([^\(]+)/)[1]

        return fName;
    }


    function AjaxPostJSON(url, data, args) {
        var objGetData = new Object();
        var fun = GetFunctionName(args);
        var s = "On" + fun + "Success";
        var f = "On" + fun + "Failure";

        objGetData.url = url;
        objGetData.type = "POST";
        objGetData.data = data;
        objGetData.contentType = "application/json; charset=utf-8";
        objGetData.dataType = "json";
        objGetData.success = window[s];
        objGetData.error = window[f];

        $.ajax(objGetData);
    }

パラメータ名がwebmethodパラメータ名と一致する必要があるスタブ。関数名は、webmethod関数名とも一致する必要があります。ページは最初のパラメーターである必要がありますが、Webメソッドに含めるべきではないことに注意してください。ここでは、呼び出しを正しくするために使用されています。//関数スタブfunction GetData(page、id、name){WebMethodCall(arguments); }

「On」+func_name+「Success」/「Failure」の成功と失敗の名前パターンに注意してください。使用法:

    function Button2_onclick() {
        // call client side stub that matches the webmethod
        GetData("Default.aspx", 8, "Bob");
    }

    // automatically registers these as success/error
    function OnGetDataSuccess(data) {
        alert(data.d);
    }

    function OnGetDataFailure(data) {
        alert("failure");
    }

これの良いところは、Webメソッドにパラメーターを変更/追加するときに、クライアントのjavascriptメソッドを取得し、Webメソッドに一致するようにパラメーター名を変更するのがとても簡単なことだと思います。

4

4 に答える 4

1

これは役に立ちますか?:

function test (name, pass){
    var params = (test.toString().substring(test.toString().indexOf('(')+ 1, test.toString().indexOf(')'))).replace(/ /g, '').split(',');
    var obj = new Object();
    var js = "";
for(var i=0;i<arguments.length;i++){
        js += 'obj.'+ params[i]+' = "'+ arguments[i]+'";';
    }
     eval(js);
     JSON.stringify(obj);
}
于 2012-11-22T13:45:18.210 に答える
1

オブジェクトで値を取得できargumentsます。名前は少しトリッキーです。関数の文字列表現を解析する必要があります。

オブジェクトを function: に直接渡し、そのオブジェクトを に直接渡したいと思いmyFunction({name: value})ますJSON.stringify

于 2012-11-22T13:37:52.900 に答える
1

私があなたを理解しているなら、変数の「名前」を「値」として取得したいのですが、そうでない場合、いいえ、できません。変数名は、プログラマーが区別するのに役立つ単なる記号です。しかし、その「メタデータ」情報を取得する方法はありません。これが、json を使用してより意味のあるオブジェクトをデータ転送オブジェクトとして提供することを好む理由です。

于 2012-11-22T13:38:06.910 に答える
0

はい、できます...しかし、それは本当に簡単なことです、グーグルは助けたでしょう

function myFunction(name,job) {
 alert("Welcome " + name + ", the " + job);
}
于 2012-11-22T13:35:22.303 に答える