. JQuery $ ": false uyumsuz" ajax

2 Cevap php

Ben şu sizin görüş / tavsiye seviniriz

Scenario

HTML arka uç her nick için bir URL var, Pdf dosyası takma adı vardır.

Bağlantı URL her download.php edilir? JS engelli müşterileri için indirme sağlamak için% PDF_Nick% = ne.

JS müşterilerine etkin için JQuery AJAX arama yapmak ve download.php gelen bağlantı URL yeniden yazma?% PDF_Nick% http://mysite.com/requestedPFF.pdf istemci indirmek etkinleştirmek üzere = ne. AJAX yeni url olsun izin vermek: I "false uyumsuz" olarak ayarlayın.

Problem

AJAX JS url değişkeni yeniden geçerli komut verir, ancak ekstra arka uç aramayı oluştururken, ilk url tekrar location.href çalışır

Eğer "uyumsuz: false," görmezden hata ile ilgili sence tanım ya da ben yapılmış ve yakalamak için özlemişim hatadır?

Şimdiden teşekkürler

HTML code


    <a href="/download.php?what=PDF_A" onclick="javascript:download
    ('PDF_A')">Download</a>

JS code

function download ( what )  {

   var url = "download.php?what="+what;

   $.ajax({
      type: "GET",
      url: "download.php?ajax=true",
      data: "what=" + what
      async: false,
      dataType: "script"
  });

  // if AJAX got the download URL I expect actual download to start:
  location.href = url;
}

Back end (download.php) code

$myPDF = array();
$myPDF["PDF_A"] = "PDF_A.pdf";
....
$url = "http://mysite.com/" . $myPDF["PDF_A"];
...
if ( $_GET["ajax"] === "true" ) {
    // overwrite JS url variable
    print('url = "'.$url.'";');
} else {
    header("Location: ". $url );
    header("Connection: close");
}

2 Cevap

Burada bir kapsam belirleme sorunu yaşıyorsunuz. JS kodu URL değişken yükleme fonksiyonu kapsam içinde var anahtar aracılığıyla ilan edilir. Bu yükleme işlevi içinde sadece kod belirli url değerini değiştirmek anlamına gelir.

Download.php dönen komut küresel kapsamda URL değerini değiştirerek edilir kapsam içinde url olarak not aynı değeri, (tarayıcıda, bu "pencere" nesnesi) indirme işlevi.

Eğer url değişkenin bildiriminde 'var' anahtar sözcüğünü kullanmak istemiyorsanız, bu küresel kapsamda otomatik olarak oluşturulur ve beklediğiniz gibi kod çalışacaktır.

Ben tasarım, ancak doğal olarak hatalı olduğunu ve tekrar gözden geçirilmesi gerektiğini, diğerleri ile katılıyorum.

Yoksa bu örnekte .responseText gibi bir senkron ajax çağrısı kullanabilirsiniz:

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

Kodunuz için bunun anlamı:

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