hata JQuery $ "yanlış zaman uyumsuz" .ajax?

oy
1

Ben aşağıda üzerinde görüş / tavsiye seviniriz

senaryo

HTML PDF dosyası takma ad vardır, arka ucu her nick için URL'ye sahiptir.

Bağlantı URL'sini hep indir.php edilir? JS özürlü müşterileri için indirme olmak için% PDF_Nick% = Ne.

JS müşterilerine etkin İçin JQuery AJAX çağrısı yapmak ve indir.php gelen bağlantı URL'yi yeniden? Ne% PDF_Nick% = http://mysite.com/requestedPFF.pdf müşteriden yükleme işlemini etkinleştirmek için. AJAX yeni url almak izin vermek: Ben yanlış zaman uyumsuz olarak ayarlayın.

Sorun

AJAX JS url değişkeni yeniden geçerli komut verir, ama ekstra arka uç çağrıyı oluşturarak, ilk url tekrar location.href çalıştırır

: False, asenk tanımı ya da hata yaptığım ve yakalamak için kaçırdığınızı oluyor bunu görmezden hatadan alakalı düşünüyor musunuz?

Şimdiden teşekkür ederim

HTML Kodu


    <A href = / indir.php neyi = PDF_A? Onclick = javascript: indir
    ( 'PDF_A') > İndirme </a>

JS kodunun

fonksiyonu indir (ne) {

   var url = download.php? Ne = + ne;

   $ .ajax ({
      yazın: GET,
      url: ? indir.php ajax = true,
      veriler: what = + what
      zaman uyumsuz: false,
      dataType: script
  });

  AJAX indir URL'yi sahipsek // Ben gerçek indirme başlamasını beklediklerini:
  location.href = URL;
}

Arka uç (indir.php) kodu

$ MyPDF = array ();
$ MyPDF [ PDF_A] = PDF_A.pdf;
....
$ Url = http://mysite.com/. $ MyPDF [ PDF_A];
...
if ($ _GET [ ajax] === true) {
    // JS url değişkenlerin üzerine
    Baskı ( 'url = '. $ url. ';');
} Başka {
    başlığı (. Konum: $ url);
    başlığı ( Bağlantı: close);
}
Oluştur 09/12/2008 saat 15:55
kaynak kullanıcı
Diğer dillerde...                            


3 cevaplar

oy
3

AJAX isteği asenkron doğasını devre dışı bir nedeni var mı? istek tamamlanana kadar bu tarayıcıyı kilitlenir. Onun yerine bir geri arama kullanarak daha iyi:

$.ajax({
  type: "GET",
  url: "download.php?ajax=true",
  data: "what=" + what,
  dataType: "script",
  success: function(msg) {
      location.href = url;
  }
});
Cevap 09/12/2008 saat 16:02
kaynak kullanıcı

oy
3

Yoksa bir senkron ajax arama kullanabilirsiniz .responseText bu örnekte olduğu gibi:

var html = $.ajax({
  url: "some.php",
  async: false
}).responseText;

Kodunuzdaki için bunun anlamı şudur:

function download ( what )  {
  var url = "download.php?what="+what;

  location.href = $.ajax({
       type: "GET",
       url: "download.php?ajax=true",
       data: "what=" + what
       async: false,
       dataType: "script"
  }).responseText;
}
Cevap 09/12/2008 saat 16:27
kaynak kullanıcı

oy
4

Burada bir kapsam sorunu yaşıyorsunuz. sizin JS kodu URL değişkeni indir fonksiyonunun kapsamı içine var anahtar vasıtasıyla ilan edilir. Bu indirme işlevi içinde sadece kod o belirli url değerini değiştirmek anlamına gelir.

Indir.php dönen script küresel kapsamda URL değerini (tarayıcı üzerinde, bu "pencere" nesnedir), modifiye edilir değil indirme işlevinin kapsamı içine url ile aynı değer.

Eğer url değişkeninin ilanı konusunda 'var' anahtar kelime kullanmak istemiyorsanız, küresel kapsamda otomatik olarak oluşturulacaktır ve beklediğiniz gibi kod çalışacaktır.

Ben senin tasarım Ancak doğal olarak hatalı olduğu ve tekrar gözden geçirilmesi gerekir ki başkaları ile katılıyorum.

Cevap 07/01/2009 saat 01:19
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more