【问题标题】:Ajax response is not received before application is loaded in extjs在 extjs 中加载应用程序之前未收到 Ajax 响应
【发布时间】:2021-01-01 23:46:34
【问题描述】:

我想在启动功能中发送 Ajax 请求,并根据响应打开登录窗口或主窗口。

应用程序.js

    launch: function () {

            debugger;
            
            Ext.Ajax.request({
                url: 'php/foo.php',
                params: {
                  email: 'test@gg.com',
                  password: '12345',
                },
                success: function(response, opts){console.log('OK');}, 
                failure: function(response, opts){console.log('ERROR');},  
            });     
        
            debugger;
        
            console.log('This should be printed after Ajax response (either OK/ERROR)');
        
            debugger;

foo.php

<?php
$login=$_POST['email'];
$pass=$_POST['password'];

$result = array();

echo json_encode(array(
    "success" => $pass=="123456",
    "data" => $result
));

但是,我注意到 Ajax 调用的响应在函数结束之前还没有准备好(图 1)

【问题讨论】:

    标签: ajax extjs response


    【解决方案1】:

    Ajax 请求是异步的,在上面的代码示例中,ajax 请求被提交到服务器,然后程序进入下一行代码(调试器)。请求成功后要执行的任何操作都需要在成功回调函数内完成。

    由于这是 ExtJS,我使用的一种模式是触发全局事件,如下所示:

    Ext.GlobalEvents.fireEvent('applicationstart')

    主应用程序监听这个事件,然后打开主应用程序。不过,这些是其他方法。

    【讨论】:

    • 对成功请求执行的任何操作都需要在成功回调函数内部完成。 但是,在我的示例中,该操作 (console.log('OK')) 在成功回调函数。
    • 这是正确的,该消息应该显示在控制台中。在该函数内部,您还应该打开您的应用程序窗口。
    • 谢谢,但我还是很困惑。我期望(以及我想要的)是在 This 应该在 Ajax 响应之后打印(OK/ ERROR) 而不是在它之后。
    • 正如 norbeq 指出的那样,添加 async: false 可以做到这一点,但绝对不推荐。您要么必须将代码添加到回调函数中,要么触发一个事件来处理收到响应后要完成的逻辑。
    【解决方案2】:

    您可以通过将async:false 设置为请求为synchronous 来实现,但不建议这样做。

    例如

    Ext.Ajax.request({
        async: false,
        url: 'php/foo.php',
        params: {
            email: 'test@gg.com',
            password: '12345',
        },
        success: function(response, opts){console.log('OK');}, 
        failure: function(response, opts){console.log('ERROR');},  
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多