スクリプトとして返されたデータを実行する簡単な投稿があります。
$.post("/home", { foo: 'bar' }, function(){
//callback function
}, "script");
何が起こるかは次のとおりです。
- リクエストが送信される
- JS コードの一部が応答として返され、実行されます
- コールバックが実行されます
返された JS が実行される前に、コールバックを実行する必要があります。これを達成する方法はありますか?
ありがとう!
スクリプトとして返されたデータを実行する簡単な投稿があります。
$.post("/home", { foo: 'bar' }, function(){
//callback function
}, "script");
何が起こるかは次のとおりです。
返された JS が実行される前に、コールバックを実行する必要があります。これを達成する方法はありますか?
ありがとう!
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 リクエストを取り出してコールバック関数で実行しても、セキュリティ上のリスクはありません。
$.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);
}
});
ajax リクエストを送信する前に実行される「BeforeSend」オプションを使用できます。
$.ajax({
type: "POST",
url: "SOMEURL",
data: { "WHATEVER": whatever },
beforeSend: function() {
//DO WHATEVER BEFORE SEND AJAX CALL
}
.....
});
}
お役に立てれば。
よろしくお願いします。
ホセ
この $.post() 関数は、返された JS を自動的に実行しません。おそらくコールバック関数で実行されます。