javascript - window.location.href tidak melompat serta-merta dalam kaedah Adakah terdapat sebarang cara untuk menyelesaikannya?
欧阳克
欧阳克 2017-06-26 10:58:15
0
7
2194

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>

欧阳克
欧阳克

温故而知新,可以为师矣。 博客:www.ouyangke.com

membalas semua(7)
女神的闺蜜爱上我

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

代言

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.

为情所困

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();
    }
学习ing

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.

ringa_lee

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.

某草草

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?

三叔

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan