Neden bu AJAX isteği kadar uzun Birden fazla arama yapmak gerektiği zaman sürer?

4 Cevap php

Ben değiştiren bir metin dosyasından bir sayı döndüren bir PHP komut dosyası için bir AJAX isteği yapmak. Bu AJAX isteği her 3 saniyede gerçekleşmesi gerekir. Ancak, AJAX isteği kez yapılır ve AJAX GET isteği hala yapılıyor gösteren bir şey ve kundakçı dönmez. Birkaç dakika sonra geri döner ve bir sayı üretir. Birden fazla çağrı yapılmış olmalıdır ama sadece birini yaptı ve sadece son bir cevap ile geri geldi. Bu nasıl oldu anlamaya mücadele ediyorum!? (

//this is called first which calls getStatus which should get the progres of the
//conversion. This AJAX request takes a long time to come back which may hinder the
//getStatus coming back quickly maybe?
function convertNow(validURL){

       startTime = setTimeout('getStatus();', 6000);
       $.ajax({
       type: "GET",
       url: "main.php",
       data: 'url=' + validURL + '&filename=' + fileNameTxt,
       success: function(msg){  
       }//function	   
     });//ajax

}//function convertNow

function getStatus(){

    $.ajax({
    type: "POST",
    url: "fileReader.php",
    data: 'textFile=' + fileNameTxt,
    success: function(respomse){
    textFileResponse = respomse.split(" ");
    $("#done").html("Downloading" + textFileResponse[0]);

    if(textFileResponse[0]=='100.0%'){
            $("#loading").hide("slow");
    	$("#done").html("Complete");   
    	return;
    }
        continueTime = setTimeout('getStatus();', 3000); 
    }
    });//ajax
}

İkinci JavaScript işlevi çağıran PHP komut dosyası şudur:

$fileName = $_POST['textFile'];
//calls an external script to get the text file output
$result = file_get_contents($_SESSION['serverURL']."fileReader.php?textFile=$fileName");
echo $result;

Doğru üzerinde ve benim yukardaki mantık yakalanır? Veya üstünde tek bir AJAX isteği yapılacaktır demek?

Bu soru, another question ile ilgili bulunmaktadır. Daha önce düşünülen bir PHP komut dosyası yavaş oldu. Ben sorun artık ilişkili JavaScript umuyorum.

Herhangi bir yardım için teşekkür ederiz.

4 Cevap

Bu kod tüm çalışma varsayalım zaman ben merak ediyordum. Javascript buna benzer bir şey uygulamak için tüm fikir şüpheli diyelim. Her şeyden önce, çünkü tüm JavaScript herhangi bir eşitleme teknikleri yok, ama sana senin% 99 durumda değil, kod yürütme, özellikle sırasına güvenmek kod. : Ayarlayarak

setTimeout( "getStatus", 6000);

you create a kind of concurrency, therefore you can get the second script executed first, although you delayed it, but two requests can reach the server at the same time, so probably the second script will not return you anything, so the success function will not executed anymore.
My hot advise to you consider redesign of your application, since the problem is definetely not in Javascript part at all.

. BTW, ben $ ajax çağrısının kullanımı gibi olması gerektiğini düşünüyorum:

$.ajax({
type: "POST",
url: "fileReader.php",
data: { param1: value1, param2:value2...etc},
success: function(respomse){ ...}});

PS. Yanıt sunucu tarafında değil, JavaScript kodunuzda sorununa noktaya geri dönmek için çok fazla zaman alır aslında. Biz günlüğünü hakkında konuşmaya başladık ve kundakçı söz ettik Ve eğer mesajlarınızı teselli kundakçı oturum console.log ("msg") kullanabilirsiniz.

Yapabileceğiniz eğer ben emin değilim

setTimeout("getStatus();",3000);

ama ben bunu biliyorum

setTimeout(getstatus,3000);

I'm not sure what you are running into with the slowness, but I would try putting alerts in: before the ajax, and at the success, print to a log in php (possible start and finish), and alert in the javascript when you set the continueTimeout, possibly even alert when the timeout fires... Like:

function getStatus(){
  alert('getStatus Started');
  $.ajax({
    type: "POST",
    url: "fileReader.php",
    data: 'textFile=' + fileNameTxt,
    success: function(respomse){
      alert('ajax success');
      textFileResponse = respomse.split(" ");
      $("#done").html("Downloading" + textFileResponse[0]);
      if(textFileResponse[0]=='100.0%'){
        $("#loading").hide("slow");
        $("#done").html("Complete");   
        return;
        }
      alert('starting continuetime');
      continueTime = setTimeout(**getStatus**, 3000); 
      }
    });//ajax
  }

Sen iyi setInterval yerine setTimeout kullanmalısınız

Ayrıca, yeni bir değişken kullanarak zaman "var" unutma.

Geçti params doğru ve ajax isteği hala bir şey çıkmıyorsa, o zaman suçlu sunucu tarafı.

fileReader.php sonsuz bir döngü içinde kendisini çağırıyor?

Tabii bu gibi geliyor. Orada küçük bir kod parçacığını de lookng ederek, o emin de ona benziyor. (Mı ki tüm kod?)

fileReader.php o zaman muhtemelen web sunucusu istemci başına verir gibi birçok arama yapıyor ve o zaman bir yığın taşma hatası almıyorsanız neden açıklıyor, beklemeye oluyor ise. Ne zaman ajax zaman aşımına sonra (60 saniye ya da ne olursa olsun) tüm fileReader.php çağrı yığını sadece dışarı ölür, ve ilk ajax gelen cevap ile kalacaksın. Ya da belki ilk fileReader-çağrı cevap ile kalacaksın. Emin değil Ehr.

Belki eklemeyi deneyin

if(!isset($_POST['textFile'])){echo "ERR: POST['textfile'] not set!"; exit(-1);}

fileReader.php-dosyasında bölümünde önce gösterdi.