Rumah  >  Soal Jawab  >  teks badan

javascript - window.location.href tidak melompat serta-merta dalam kaedah Adakah terdapat sebarang cara untuk menyelesaikannya?

Soalan: Mengapa ia tidak dilaksanakan location.href = "../exit.html";, 而是执行了 window.location.href = 'http://www.baidu.com';?

Adakah terdapat cara untuk melaksanakan kaedah getData(), 如果获取数据失败,则跳转到 ../exit.html, 不再执行 gourl();?

Tambahan: ajax里面的 async: false 是同步请求!!!, ini hanyalah demo ringkas Sebenarnya, mungkin terdapat banyak logik di sebalik kaedah getData(), tetapi jika getData() gagal mendapatkan data, program tidak akan dibenarkan untuk melaksanakan kaedah lain, dan kaedah lain mungkin tidak ada di dalam fail yang sama.


<!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>

欧阳克欧阳克2651 hari yang lalu2157

membalas semua(7)saya akan balas

  • 女神的闺蜜爱上我

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

    Kemudian anda boleh menghubungi semula gourl selepas kejayaan kaedah getData untuk melaksanakan pemprosesan logik yang anda mahukan
    Selain itu, saya tidak tahu bagaimana untuk menilai is_kejayaan anda secara khusus kerana terdapat $ajax dan ralat yang sepadan

    balas
    0
  • 代言

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

    Kod anda bersamaan dengan melaksanakan dua ayat berikut:

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

    Apabila kedua-dua ayat ini dilaksanakan secara berterusan, mereka akan melompat ke alamat berikut

    Tekaan saya ialah pelayar mengambil masa untuk mengakses yang pertama, tetapi sebelum ia berjaya, lompatan kedua datang lagi, jadi saya melepaskan lompatan pertama dan melaksanakan lompatan kedua, sama seperti memasukkan alamat dua kali dengan cepat dalam URL yang sama.

    balas
    0
  • 为情所困

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

    Fungsi

    gourl() tidak boleh dipanggil di hadapan, tetapi harus diletakkan di tengah logik Ajax, dan tambah else{gourl();}
    selepas logik if:

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

    balas
    0
  • 学习ing

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

    Kod penyoal boleh difahami seperti berikut:

        <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>

    Apabila terdapat dua lokasi.hrefs berturut-turut dalam kod, lompatan seterusnya akan dilaksanakan Subjek soalan ini boleh mencubanya sendiri.

    Selain itu, memandangkan ajax adalah tak segerak, subjek perlu menulis if(!is_success)写到ajax中的error中去,或者写到success中的else判断中,否则无论ajax是否成功,都会跳转。gourl() ke dalam kejayaan juga.

    Selain itu, ralat merentas domain harus berlaku jika ajax digunakan secara langsung seperti ini. Adalah disyorkan untuk menggunakan proksi atau kaedah lain untuk menyelesaikan masalah merentas domain.

    balas
    0
  • ringa_lee

    ringa_lee2017-06-26 11:00:15

    Kod telefon mudah alih, adakah ini maksud anda?

    $(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();
              }
          });
    });

    Terutamanya menggunakan janji jQ, semua ditulis secara tak segerak, semua panggilan balik ajax yang berjaya diletakkan dalam selesai Ditunda (jika terdapat berbilang, ia juga boleh ditulis sebagai tatasusunan), dan kemudian hanya berikan status secara langsung dalam selesai ajax.

    balas
    0
  • 某草草

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

    Oleh kerana getDatagourl有执行的关系,要么把gourl diletakkan dalam pertimbangan panggil balik, ini boleh sesuai untuk kegunaan tak segerak.
    Jika penyegerakan dengan subjek, maka tidak mengapa

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

    Bolehkah saya mengawal Gourl terus di sini untuk melaksanakannya?

    balas
    0
  • 三叔

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

    Mungkin terdapat sesuatu yang tidak kena dengan logik kod anda. Ajax tidak segerak. gourl(); Fungsi ini tidak boleh dipanggil di tempat itu. Ia boleh dipanggil dalam panggilan balik kejayaan atau kegagalan permintaan ajax.
    Melihat permintaan anda, ia harus dipanggil dalam kejayaan.

    balas
    0
  • Batalbalas