2016-04-24 12 views
0

Ich habe Diese Zahlung soll:jQuery Fortschrittsbalken springt auf 100%

HTML

<div id="tst_loader"></div> 

JAVASCRIPT

$.ajax({ 
    xhr: function() { 
     var xhr = new window.XMLHttpRequest(); 
     xhr.upload.addEventListener("progress", function(evt) { 
      if (evt.lengthComputable) { 
       var percentComplete = evt.loaded/evt.total; 
       //Do something with upload progress here 
     $('#tst_loader').html(percentComplete * 100 + '%'); 
      } 
     }, false); 

     xhr.addEventListener("progress", function(evt) { 
      if (evt.lengthComputable) { 
       var percentComplete = evt.loaded/evt.total; 
       //Do something with download progress 
      $('#tst_loader').html(percentComplete * 100 + '%'); 
      } 
     }, false); 

     return xhr; 
    }, 
    type: 'POST', 
    url: url, 
    data: {feed:""}, 
    success: function(data){ 
     //Do something on success 

    alert('done'); 
    } 

die PHP-co de:

<?php 

$_POST['feed'] = 'http://www.cs.washington.edu/research/xmldatasets/data/tpc-h/orders.xml';/// A little heavier file for testing 


       $dom = new DOMDocument; 
       $dom->load($_POST['feed']); 

if(false !== $dom){ 

$use_errors = libxml_use_internal_errors(true); 
         $s = simplexml_import_dom($dom); 
         libxml_clear_errors(); 
         libxml_use_internal_errors($use_errors); 
         //libxml_disable_entity_loader($oldDisable); 

         if(false !== $s){  
$ctr = 0; 
foreach ($s->channel->item as $item) { 

    $out[$ctr]=$item->title; 

$ctr++; 
} 

echo json_encode($out); 

} 


} 




     ?> 

Jedes Mal, wenn der Code ausgeführt wird, springt die progressbar sofort 100% obwohl die RSS FEED noch geholt wird .... in anderen Worten, es gibt keinen Fortschritt zeigt. Alles scheint toll, aber es springt weiter ... Irgendeine Idee, wie man das erreicht? ... Danke!

EDIT:: der Link zu etwas geändert etwas schwerer: http://www.cs.washington.edu/research/xmldatasets/data/tpc-h/orders.xml

+0

Ist die 'event.lengthComputable'? Bei einem PHP-Skript lautet die Antwort normalerweise "Nein", es sei denn, Sie geben explizit den Header "Content-Length" an. – Chris

+0

Könnte XMLHTTPRequest2 bei späteren Browsern weiterhin verwenden –

+0

@Chris wie ** die 'Content-Length' angeben? .... irgendeine Idee? ... Sie können es als Antwort posten, um möglicherweise akzeptiert zu werden. thx –

Antwort

0

In Bezug auf die Frage in den Kommentaren diskutiert, die Möglichkeit, einen Content-Length Header zu setzen (obwohl in diesem Fall ist es nicht so nützlich) würde Ersetzen Sie Ihre echo json_encode($out); durch diese:

$content = json_encode($out); 
header("Content-Length: ".strlen($content)); 
echo $content; 
+0

Danke, obwohl ich es immer noch nicht sehen kann Laden ... Die neue XML-Datei habe ich etwa 5MB, aber es lädt nicht zu 100% ... Ich benutze Firefox und probierte Chrome auch noch nicht laden though :( –

+0

@UniversalGrasp Wie ich im Kommentar zu der Frage gesagt habe. Die Zeit, die zum Laden des XML benötigt wird, ist völlig irrelevant. Der Fortschrittsbalken bleibt für die ganze Zeit bei 0. Das einzige, was man mit Standard AJAX berechnen kann Fortschritt ist der Fortschritt der Übertragung der endgültigen Ausgabe vom Server zum Client – Chris

+0

Sie meinen, es gibt absolut keine Möglichkeit? ... :( –