JQuery $ .ajax "ασύγχρονη: false" bug;

ψήφοι
1

Θα εκτιμούσα τη γνώμη / συμβουλή σας σχετικά με τα ακόλουθα

Σενάριο

HTML έχει αρχείου PDF ψευδώνυμο, πίσω άκρο έχει διεύθυνση URL για κάθε nick.

Η διεύθυνση URL συνδέσμου είναι πάντα download.php; τι =% PDF_Nick% για τη διασφάλιση λήψης για JS πελάτες με ειδικές ανάγκες.

Για να ενεργοποιήσετε τους πελάτες JS κάνω JQuery AJAX κλήση και να ξαναγράψει URL σύνδεσμο από download.php; τι =% PDF_Nick% έως http://mysite.com/requestedPFF.pdf να ενεργοποιήσετε την λήψη από τον πελάτη. Έθεσα «ασύγχρονη: false» για να επιτρέψει AJAX πάρει νέα διεύθυνση URL.

Πρόβλημα

AJAX επιστρέφει έγκυρο σενάριο ξαναγράφοντας JS μεταβλητή url, αλλά τρέχει location.href και πάλι στην αρχική url, δημιουργώντας επιπλέον πίσω τέλος κλήσης

Νομίζετε ότι σχετίζεται με το σφάλμα αγνοώντας «ασύγχρονη: false,» ορισμό ή είναι λάθος που έχω κάνει και έχασε για να πιάσει;

Ευχαριστώ εκ των προτέρων

Ο κώδικας HTML


    <A href = / download.php τι = PDF_A; onclick = javascript: κατεβάσετε
    ( 'PDF_A') > Λήψη </a>

κωδικός JS

λειτουργία λήψης (τι) {

   var url = download.php τι =; + τι?

   $ .Ajax ({
      Τύπος: GET,
      url: download.php ajax = true,
      στοιχεία: «τι =» + ό, τι
      ασύγχρονη: ψευδής,
      Τύπος δεδομένων: «σενάριο»
  })?

  // αν AJAX πήρε το URL λήψης περιμένω πραγματική λήψη για να ξεκινήσετε:
  location.href = url?
}

Επιστροφή τέλος (download.php) Κωδικός

$ MyPDF = array ()?
$ MyPDF [ PDF_A] = PDF_A.pdf?
....
$ Url = http://mysite.com/. $ MyPDF [ PDF_A]?
...
if ($ _GET [ Αίας] === αλήθεια) {
    // αντικαταστήσετε JS μεταβλητή url
    print ( 'url = '. $ url.? )?
} Αλλού {
    header (. Τοποθεσία: $ url)?
    header ( Σύνδεση: κλείσιμο)?
}
Δημοσιεύθηκε 09/12/2008 στις 15:55
πηγή χρήστη
Σε άλλες γλώσσες...                            


3 απαντήσεις

ψήφοι
4

Είσαι αντιμετωπίζουν ένα πρόβλημα οριοθέτησης εδώ. Η μεταβλητή διεύθυνση URL στον κώδικα JS σας δηλώνεται με τη λέξη-κλειδί var μέσα στο πεδίο της λειτουργίας λήψης. Αυτό σημαίνει ότι μόνο κώδικα μέσα στη συνάρτηση λήψης μπορεί να τροποποιήσει τη συγκεκριμένη τιμή url.

Το σενάριο επέστρεψε από την download.php τροποποιεί την τιμή URL στην παγκόσμια εμβέλεια (στο πρόγραμμα περιήγησης, αυτό είναι το «παράθυρο» αντικείμενο), το οποίο είναι όχι η ίδια τιμή με το url μέσα στο πεδίο της λειτουργίας λήψης.

Εάν δεν θέλετε να χρησιμοποιήσετε τη λέξη-κλειδί «var», σχετικά με τη δήλωση της μεταβλητής url, θα δημιουργηθεί αυτόματα στην παγκόσμια εμβέλεια και τον κωδικό σας θα λειτουργεί όπως αναμένεται.

Συμφωνώ με τους άλλους, ότι το σχέδιό σας είναι εγγενώς εσφαλμένη και πρέπει να επανεξεταστεί, όμως.

Απαντήθηκε 07/01/2009 στις 01:19
πηγή χρήστη

ψήφοι
3

Ή μπορείτε να χρησιμοποιήσετε μια κλήση synchron ajax με .responseText όπως σε αυτό το παράδειγμα:

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

Για τον κωδικό σας αυτό σημαίνει:

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;
}
Απαντήθηκε 09/12/2008 στις 16:27
πηγή χρήστη

ψήφοι
3

Υπάρχει κάποιος λόγος να απενεργοποιήσετε την ασύγχρονη φύση του αιτήματος AJAX εκεί; θα κλειδώσει το πρόγραμμα περιήγησης μέχρι να ολοκληρωθεί η αίτηση. Είστε σε καλύτερη θέση χρησιμοποιώντας ένα επανάκλησης αντί:

$.ajax({
  type: "GET",
  url: "download.php?ajax=true",
  data: "what=" + what,
  dataType: "script",
  success: function(msg) {
      location.href = url;
  }
});
Απαντήθηκε 09/12/2008 στις 16:02
πηγή χρήστη

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