1

私の HTML ページには、データを取得するための AJAX Post があります。返されたデータには文字列が含まれており、この文字列の内容は生の JavaScript です。

$.ajax({
    url: '@Url.Action("GetPropertyDataForInstance", "Local_Data")',
    type: 'POST',
    dataType: 'json',
    data: instancePropertyRequest,
    contentType: 'application/json; charset=utf-8',
    success: function (response) {

        var javscriptRawString = response.javascriptToExecute;   
        var alertString = response.data;
    }
})

javascriptRawString の内容:

alert(alertString);

このjavascriptRawStringを取得した後、内部でjavascriptを直接実行できるようにするにはどうすればよいですか??

4

3 に答える 3

4

eval は悪であるため、これは eval よりもわずかに優れています ;)

(new Function(response.data))()

eval多くのセキュリティホールが存在する可能性があるため、使用は悪です。グローバル スコープでコードを実行しています。Function独自のスコープで実行することにより、これを別の方法で実行します。

new Functionも高速です

あなたの場合

$.ajax({
    url: '@Url.Action("GetPropertyDataForInstance", "Local_Data")',
    type: 'POST',
    dataType: 'json',
    data: instancePropertyRequest,
    contentType: 'application/json; charset=utf-8',
    success: function (response) {

        (new Function(response.data))()   

    }
})

new Function生のテキストから新しい関数を作成します。

()()関数をすぐに実行する

関数を ajax で取得する場合は、追加のチェックとヘッダーも追加します。これをチェックして。

https://stackoverflow.com/a/17468822/2450730

編集

ajaxからパラメータを渡したい場合

//raw ajax response
var x='param';
alert(x)

ajaxの内部からパラメータを渡したい場合(良くありません。)

success: function (response) {
 var x='param';
 (new Function(response.data))(x)   
}

alert(x);

編集 2

1.スクリプト 2.パラメータでオブジェクトを取得した場合

次に、引数名を定義する必要があります。この場合は「x」です。

js

 (new Function('x',response.script))(response.param)

RAW response.script

 alert(x)

その他の引数:

(new Function('a','b','c','alert(a+b+c)'))(1,2,3) // 123

TEST IT ... http://jsfiddle.net/pLQzd/ READ IT ... https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function 一番下までスクロールします。

しかし、関数と変数を含むオブジェクトを取得すると...同じajax呼び出しから

すでに説明したものを作成するだけです。

var param='hello';
alert(param);

またはさらに単純な

alert('hello');
于 2013-10-31T16:28:17.537 に答える
2

次の方法で任意の文字列を実行できますeval

eval('alert("hello world")');

ただし、評価しているものを正確に知っていることを確認してください。

于 2013-10-31T16:17:44.500 に答える