如何在数据之前执行 jQuery 回调?

发布于 2024-09-16 06:58:58 字数 280 浏览 4 评论 0原文

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

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

发生的情况如下:

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

我需要在执行返回的 JS 之前执行回调。 有办法实现这一点吗?

谢谢!

I have a simple post, which executed the data returned as a script as such:

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

Here's what happens:

  1. The request gets sent
  2. A piece of JS code is returned as a
    response and executed
  3. The callback is executed

I need the callback to be executed before the returned JS is executed.
Is there a way to achieve this?

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

养猫人 2024-09-23 06:58:59

您可以使用在发送 ajax 请求之前执行的“BeforeSend”选项:

$.ajax({

    type: "POST",

    url: "SOMEURL",

    data: { "WHATEVER": whatever },

    beforeSend: function() {

      //DO WHATEVER BEFORE SEND AJAX CALL

    }
.....

});

希望这

会有所帮助。

此致。

何塞

You could use "BeforeSend" option that is executed before send the ajax request:

$.ajax({

    type: "POST",

    url: "SOMEURL",

    data: { "WHATEVER": whatever },

    beforeSend: function() {

      //DO WHATEVER BEFORE SEND AJAX CALL

    }
.....

});

}

Hope this helps.

best regards.

Jose

娇妻 2024-09-23 06:58:59

这个 $.post() 函数不会自动执行返回的 JS。它可能是在回调函数中执行的。

This $.post() function does not automatically execute the JS which is returned. It is probably executed in the callback function.

深海蓝天 2024-09-23 06:58:58

您无法更改 jQuery 处理请求的方式。毕竟,回调就是回调,工作完成后就会执行!但是,您可以将 dataType 设置为 "text",然后评估您的 Javascript。

例如:

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

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

** UPDATE **

这是 jQuery 在内部执行的操作(片段):

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

因此,从 Ajax 请求中取出 globalEval 并执行它不存在安全风险在回调函数中。

You can't change how jQuery handle the request. After all, a callback is a callback and it gets executed once the job is done! You can, however, set the dataType to "text" and then eval your Javascript.

Ex:

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

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

** UPDATE **

This is what jQuery does internally (snipped) :

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

So, there is no security risk with taking the globalEval out of the Ajax request and executing it in the callback function.

绮烟 2024-09-23 06:58:58

使用 $.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);
        }
});

Use $.ajax() and build your own script tag.

$.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);
        }
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文