2

我有一个简单的帖子,它执行了作为脚本返回的数据:

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

这是发生的事情:

  1. 请求被发送
  2. 一段JS代码作为响应返回并执行
  3. 回调被执行

我需要在执行返回的 JS之前执行回调。有没有办法做到这一点?

谢谢!

4

4 回答 4

3

您无法更改 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 请求中取出并在回调函数中执行它没有安全风险。

于 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 回答