我有一个简单的帖子,它执行了作为脚本返回的数据:
$.post("/home", { foo: 'bar' }, function(){
//callback function
}, "script");
这是发生的事情:
- 请求被发送
- 一段JS代码作为响应返回并执行
- 回调被执行
我需要在执行返回的 JS之前执行回调。有没有办法做到这一点?
谢谢!
我有一个简单的帖子,它执行了作为脚本返回的数据:
$.post("/home", { foo: 'bar' }, function(){
//callback function
}, "script");
这是发生的事情:
我需要在执行返回的 JS之前执行回调。有没有办法做到这一点?
谢谢!
您无法更改 jQuery 处理请求的方式。毕竟,回调是回调,一旦工作完成就会执行!但是,您可以将 Javascript 设置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。它可能在回调函数中执行。