2

スクリプトとして返されたデータを実行する簡単な投稿があります。

$.post("/home", { foo: 'bar' }, function(){
    //callback function
}, "script");

何が起こるかは次のとおりです。

  1. リクエストが送信される
  2. JS コードの一部が応答として返され、実行されます
  3. コールバックが実行されます

返された JS が実行される前に、コールバックを実行する必要があります。これを達成する方法はありますか?

ありがとう!

4

4 に答える 4

3

jQuery が要求を処理する方法を変更することはできません。結局のところ、コールバックはコールバックであり、ジョブが完了すると実行されます! ただし、をに設定してdataTypeから"text"、Javascript を評価することはできます。

元:

$.post("/home", { foo: 'bar' }, function(data){
   //callback function

   // execute JS
   $.globalEval( data );
}, "text");

**更新**

これはjQueryが内部的に行うことです(抜粋):

// If the type is "script", eval it in global context
} else if ( type === "script" || !type && ct.indexOf("javascript") >= 0 ) {
   jQuery.globalEval( data );
}

globalEvalしたがって、 Ajax リクエストを取り出してコールバック関数で実行しても、セキュリティ上のリスクはありません。

于 2010-08-27T17:24:36.103 に答える
1

$.ajax()独自のスクリプト タグを使用して作成します。

$.ajax({url:"/home",
        data: { foo: 'bar' },
        type: "POST",
        dataType: 'text',     // Return dataType is "text" instead of "script"
        success: function( script ){
           // run your code
           alert('mycode');
           // then create your own script tag
           var tag = document.createElement('script');
           tag.setAttribute('type','text/javascript');
           tag.appendChild(document.createTextNode(script));
           document.getElementsByTagName('head')[0].appendChild(tag);
        }
});
于 2010-08-27T18:49:25.690 に答える
0

ajax リクエストを送信する前に実行される「BeforeSend」オプションを使用できます。

$.ajax({

    type: "POST",

    url: "SOMEURL",

    data: { "WHATEVER": whatever },

    beforeSend: function() {

      //DO WHATEVER BEFORE SEND AJAX CALL

    }
.....

});

}

お役に立てれば。

よろしくお願いします。

ホセ

于 2010-08-27T17:22:04.543 に答える
-2

この $.post() 関数は、返された JS を自動的に実行しません。おそらくコールバック関数で実行されます。

于 2010-08-27T17:18:49.823 に答える