我有一个具有预订/预订功能的web应用程序。我的核心功能之一是检查预订是否与其他预订冲突,并且该函数跨多个页面使用。它的返回数据通常不带有页面,因为它的请求参数依赖于用户输入。换言之:
但是,ajax函数不适合我的预期使用。在ajax调用完成之前,包装器函数将不返回任何内容,因为它具有异步特性。如果我需要使用返回的数据执行某件事情,它应该在ajax调用的成功函数中,但是由于我需要根据哪个页面和需要数据的情况发生不同的事情。
我看到了三种解决我的问题的方法。我只是无法决定哪种方法是最好的,或者是否有第四种更好的选择:
1.跳过ajax函数的抽象。换句话说,只要将它复制/粘贴到我需要数据的每个函数中,就可以在任何时候都可以获得成功条件函数。
2.传递一个succes-函数作为参数。如果需要动态发生什么事情,我可以这样做,方法是将一个函数传递给ajax -包装函数,并确保传递的函数接受ajax返回的数据作为它自己的参数。
3.使ajax调用同步.成为可能,但在某种程度上破坏了是jax的概念(实际上我也在使用JSON,这样就可以将ajax转化为jax)。
老实说,我真的看不出任何一个解决方案都是这里的赢家。我非常感谢你的帮助。
发布于 2015-12-22 10:02:29
我建议采用基于事件的方法。在ajax成功的情况下,您可以触发(触发器)一个事件,例如booking-check-complete,并且特定的页面以它需要的方式处理事件。
通过这种方式,您可以保留ajax良好的优点--异步,并保持页面解耦的。
对于这种使用,我使用jQuery事件机制,但也有其他可用的库。看看这里- 触发器
例如,在第一页中的:
$( document ).on( "booking-check-complete", function( event, param1, param2 ) {
alert( "Hello from page 1" );
});在您的第二页上:
$( document ).on( "booking-check-complete", function( event, param1, param2 ) {
alert( "Hello from page 2" );
});和ajax的成功:
$( document ).trigger( "booking-check-complete", [ "Custom", "Event" ] );注意您不需要jQuery来使用描述过的事件--使用普通的javascript,但它与IE不兼容。
var event = new Event('build');
// Listen for the event.
elem.addEventListener('build', function (e) { ... }, false);
// Dispatch the event.
elem.dispatchEvent(event);发布于 2015-12-22 10:02:53
备选方案2是突出的赢家。
https://stackoverflow.com/questions/34413005
复制相似问题