recherche

Maison  >  Questions et réponses  >  le corps du texte

javascript - window.location.href ne saute pas immédiatement dans la méthode. Existe-t-il un moyen de le résoudre ?

Question : Pourquoi n'est-il pas exécuté location.href = "../exit.html";, 而是执行了 window.location.href = 'http://www.baidu.com'; ?

Existe-t-il un moyen d'exécuter la méthode getData(), 如果获取数据失败,则跳转到 ../exit.html, 不再执行 gourl(); ?

Supplément : ajax里面的 async: false 是同步请求!!!, ce n'est qu'une simple démo. En fait, il peut y avoir beaucoup de logique derrière la méthode getData(), mais si getData() ne parvient pas à obtenir des données, le programme ne sera pas autorisé à exécuter d'autres méthodes, et d'autres méthodes peuvent ne pas être présentes dans le même fichier.


<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="utf-8">
</head>

<body>
    <p>
        <h2>我是测试页面,看我是否发生跳转</h2></p>
    <script src="https://cdn.bootcss.com/jquery/1.9.0/jquery.min.js"></script>
    <script type="text/javascript">
    $(function() {
        getData();
        gourl();
    });

    function getData() {
        var is_success = false;
        $.ajax({
            type: "GET",
            url: "http://baike.baidu.com/api/openapi/BaikeLemmaCardApi?scope=103&format=json&appid=379020&bk_key=bug&bk_length=600",
            data: "",
            dataType: "json",
            async: false,
            success: function(data) {
                if (data.status == 200) {
                    is_success = true;
                } else {
                    is_success = false;
                }
            }
        });
        if (!is_success) {
            location.href = "../exit.html";
        }
    }

    function gourl() {
        console.log('我被执行了');
        window.location.href = 'http://www.baidu.com';
    }
    </script>
</body>

</html>

欧阳克欧阳克2700 Il y a quelques jours2198

répondre à tous(7)je répondrai

  • 女神的闺蜜爱上我

    女神的闺蜜爱上我2017-06-26 11:00:15

    Ensuite, vous pouvez rappeler gourl après le succès de la méthode getData pour effectuer le traitement logique souhaité
    De plus, je ne sais pas comment juger spécifiquement votre is_success car il y a $ajax et une erreur correspondante

    répondre
    0
  • 代言

    代言2017-06-26 11:00:15

    Votre code équivaut à exécuter les deux phrases suivantes :

    location.href = '../exit.html';
    location.href = 'http://www.baidu.com';

    Lorsque ces deux phrases sont exécutées en continu, elles passeront à l'adresse suivante

    Je suppose qu'il faut du temps au navigateur pour accéder au premier, mais avant qu'il ne réussisse, le deuxième saut revient, donc j'abandonne le premier saut et j'exécute le deuxième saut, comme si j'entrais rapidement l'adresse deux fois dans le URL Idem.

    répondre
    0
  • 为情所困

    为情所困2017-06-26 11:00:15

    La fonction

    gourl() ne peut pas être appelée devant, mais doit être placée au milieu de la logique Ajax, et ajouter else{gourl();}
    après la logique if :

    if (!is_success) {
            location.href = "../exit.html";
        }else {
            gourl();
        }

    répondre
    0
  • 学习ing

    学习ing2017-06-26 11:00:15

    Le code du questionneur peut être compris comme suit :

        <script type="text/javascript">
        $(function() {
            getData();
        });
    
        function getData() {
            var is_success = false;
            $.ajax({
                type: "GET",
                url: "http://baike.baidu.com/api/openapi/BaikeLemmaCardApi?scope=103&format=json&appid=379020&bk_key=bug&bk_length=600",
                data: "",
                dataType: "json",
                async: false,
                success: function(data) {
                    if (data.status == 200) {
                        is_success = true;
                    } else {
                        is_success = false;
                    }
                },
                error: function() { ... }
            });
            if (!is_success) {
                location.href = "../exit.html";
            }
            console.log('我被执行了');
            window.location.href = 'http://www.baidu.com';
        }
        </script>

    Lorsqu'il y a deux location.hrefs consécutifs dans le code, le saut suivant sera exécuté. Le sujet de cette question peut l'essayer lui-même.

    De plus, comme ajax est asynchrone, le sujet doit également écrire if(!is_success)写到ajax中的error中去,或者写到success中的else判断中,否则无论ajax是否成功,都会跳转。gourl() dans le succès.

    De plus, des erreurs inter-domaines devraient se produire si ajax est utilisé directement comme ceci. Il est recommandé d'utiliser un proxy ou d'autres méthodes pour résoudre les problèmes inter-domaines.

    répondre
    0
  • ringa_lee

    ringa_lee2017-06-26 11:00:15

    Code de téléphone portable, c'est ce que tu veux dire ?

    $(function() {
        var dtd = $.Deferred();
        dtd
          .done(function(){
              console.log('我被执行了');
              window.location.href = 'http://www.baidu.com';
          })
          .fail(function(){
              console.log('我被抛弃了');
              window.location.href = "../exit.html";
          });
        $.get("http://baike.baidu.com/api/openapi/BaikeLemmaCardApi?scope=103&format=json&appid=379020&bk_key=bug&bk_length=600", "json")
          .done(function(data) {
              if (data.status == 200) {
                  dfd.resolve();
              } else {
                  dtd.reject();
              }
          });
    });

    Utilisant principalement les promesses de jQ, toutes écrites de manière asynchrone, tous les rappels réussis d'ajax sont placés dans le done de Deferred (s'il y en a plusieurs, ils peuvent également être écrits sous forme de tableaux), puis donnent simplement un statut directement dans le done d'ajax.

    répondre
    0
  • 某草草

    某草草2017-06-26 11:00:15

    Puisque getDatagourl有执行的关系,要么把gourl est placé en jugement de rappel, cela peut convenir à une utilisation asynchrone.
    Si c'est une synchronisation avec le sujet, alors ça va

        $(function() {
            getData();
            gourl();
        });

    Puis-je contrôler Gourl directement ici pour l'exécuter ?

    répondre
    0
  • 三叔

    三叔2017-06-26 11:00:15

    Il se peut qu'il y ait un problème avec la logique de votre code. Ajax est asynchrone. gourl(); Cette fonction ne doit pas être appelée à cet endroit. Il peut être appelé lors du rappel de réussite ou d’échec de la requête ajax.
    Au vu de votre demande, elle devrait être appelée avec succès.

    répondre
    0
  • Annulerrépondre