Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我应该如何处理跨多个页面重用的ajaxget函数?_Javascript_Ajax - Fatal编程技术网

Javascript 我应该如何处理跨多个页面重用的ajaxget函数?

Javascript 我应该如何处理跨多个页面重用的ajaxget函数?,javascript,ajax,Javascript,Ajax,我有一个具有预订/预订功能的web应用程序。我的一个核心功能是检查一个预订是否与其他预订冲突,此功能用于多个页面。它的返回数据通常不与页面一起加载,因为它的请求参数取决于用户输入。换言之: 我有一个ajax函数,可以获取预订数据 为了重用,它被抽象为自己的.js文件 ajax函数封装在javascript函数中 但是,ajax函数不适合我的预期用途。由于其异步性质,在ajax调用完成之前,包装器函数将不返回任何内容。如果我需要使用返回的数据执行某些操作,它应该在ajax调用的success函

我有一个具有预订/预订功能的web应用程序。我的一个核心功能是检查一个预订是否与其他预订冲突,此功能用于多个页面。它的返回数据通常不与页面一起加载,因为它的请求参数取决于用户输入。换言之:

  • 我有一个ajax函数,可以获取预订数据
  • 为了重用,它被抽象为自己的.js文件
  • ajax函数封装在javascript函数中
但是,ajax函数不适合我的预期用途。由于其异步性质,在ajax调用完成之前,包装器函数将不返回任何内容。如果我需要使用返回的数据执行某些操作,它应该在ajax调用的success函数中,但是因为我需要根据需要数据的页面和情况发生不同的事情

我认为我的问题有三种解决办法。我无法决定哪种方法是最好的,或者是否有第四种更好的选择:

1。跳过ajax函数的抽象。换句话说,只要将它复制/粘贴到我需要数据的每个函数中,然后voilla;我会一直使用成功条件函数

2。将一个succes函数作为参数传递。如果我需要一些动态事件发生,我可以这样做,方法是将一个函数传递给ajax包装函数,并确保传递的函数接受ajax返回的数据作为自己的参数

3。使ajax调用同步。是可能的,但有点破坏了ajax的概念(实际上我也在使用JSON,这样会使ajax变成sjoj)


老实说,我真的看不出这两个解决方案中有哪一个是赢家。非常感谢您的帮助。

我建议使用基于事件的方法。 在ajaxsuccess中,您可以触发(触发)一个事件,例如
bookingcheckcomplete
,并且特定的页面按照它需要的方式处理事件

通过这种方式,您可以很好地利用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" );
});
在第二页,您有:

$( 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);
  • 不,这违反了法律
  • 对。这是惯用JavaScript
  • 不会。这会锁定UI(不推荐使用同步XHR)

  • 选项2是杰出的赢家。

    不错!我至少对jquery有中等熟练程度,因此这将很好地工作。我想我也可以使用变量将特定触发器传递给jquery函数,使其完全动态。这是我的获奖答案,但我想确保在绿化它之前,我能让它工作:)。是的,你可以向活动传递参数。在本例中,param1将是字符串“Custom”,param2将是“Event”。如果在项目中不使用jQuery,则可以考虑添加一个更轻的库,该库在不需要开销的情况下也能做到这一点。干杯我确实扩展使用jquery;)。我们赢了!我已经成功了。将正确返回预订,并触发事件。现在我只需要迭代它们,并正确地显示它们。谢谢你,好先生,你帮了大忙!作为一名开发者,我今天取得了进步!。。。当我在前面谈到变量时,我指的是
    var event_to_trigger=“booking check complete”
    ,然后调用
    $(文档)。这也有效;)很高兴听到这个消息!事件是一个强大的工具。我在整个站点上专门使用了一个通用的js结构,其中包含类似的常量,并调用Events.BookingComplete,而不是“bookingcheckcomplete”。通过这种方式,我知道所有宣布的事件都在一个地方。伟大、具体和简短的回答。有活动的那个似乎也很有希望。我现在需要测试选项:)