我应该如何处理在多个页面上重复使用的ajax get函数
How should I deal with an ajax get function, that is reused across multiple pages?
我有一个具有预订/预订功能的web应用程序。我的核心功能之一是检查预订是否与其他预订相冲突,该功能可用于多个页面。它的返回数据通常不与页面一起加载,因为它的请求参数取决于用户输入。换句话说:
- 我有一个ajax功能,可以获取预订数据
- 为了可重用性,它被抽象到自己的.js文件中
- ajax函数被封装在一个javascript函数中
但是,ajax函数不适合我的预期用途。在ajax调用完成之前,包装器函数将不返回任何内容,因为它具有异步特性。如果我需要用返回的数据执行一些事情,它应该在ajax调用的成功函数中,但由于我需要根据在哪个页面和在什么情况下需要数据来执行不同的事情。
我认为我的问题有三个解决办法。我只是无法决定哪种方法是最好的,或者是否有第四种更好的选择:
1.跳过ajax函数的抽象换句话说,只需将它复制/粘贴到我需要数据的每个函数中,瞧;我会随时提供成功条件功能。
2.将success函数作为参数传递如果我需要一些动态的事情发生,我可以通过将一个函数传递给ajax包装器函数,并确保传递的函数接受ajax返回的数据作为它自己的参数来实现。
3.使ajax调用同步可能,但有点破坏了ajax的概念(实际上我也在使用JSON,所以这将使ajax变成sjoj)。
老实说,我真的看不出这两种解决方案在这里都是赢家。如果有任何帮助,我将不胜感激。
我建议使用基于事件的方法。在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);
- 没有。这违反了DRY
- 是的。这是惯用的JavaScript
- 没有。这会锁定UI(不赞成使用同步XHR)
选项2是最突出的赢家。
- 为什么有些jQuery程序员使用像$.get、$.getJSON和$.when这样的jQuery函数来代替$.ajax
- 正在将变量解析为.get()函数
- 如何将从XML读取的值存储到本地对象's成员使用.get()函数
- 当用$.getScript()加载脚本时,有一种方法可以从用$.get script()装载的脚本中调用父脚本中的函数
- CakePHP错误:在非对象上调用成员函数get(),使用cakejavascript助手时出错
- 成功函数未在 ajax GET 方法中调用
- $resource 'get' 函数如何在 AngularJS 中同步工作
- jQuery $.get() JSON 函数正在执行,但不会产生任何结果
- ajax get-json函数没有'不起作用
- 调用$.get函数时JQuery中出现无效标签错误
- JS在构造函数中使用get
- 让指针函数接收来自.get()闭包的args
- 如何从ajax get请求的回调函数中编辑javascript变量的值
- 得到"未捕获的类型错误:未定义的不是函数“;当试图从对象调用get()或set()时
- ajax上get函数内部的未定义错误
- 错误$.get(..).done不是函数
- 将get()添加到行导致“;不是函数“;错误
- 等待函数 $.get 中的代码完成以继续
- jQuery:成功传递变量给函数$.get请求
- TypeError: undefined不是一个函数GET请求/数据库调用