2016-07-30 63 views
5

我有一個代碼,它增加了while循環中的URL參數,直到$i等於10.發生這種情況時,它將顯示每個數字最多10個(因爲這是$i停止增加時) - 在這種情況下,它將是1,2,3,4,5,6,7,8,9。逐個顯示每個結果

問題是隻有當$i等於10時它才顯示1,2,3 ,4,5,6,7,8,9 - 我需要它在發生時顯示數字(而不是等待$i等於10!)。

<div id="here"></div> 

<script> 
$(document).ready(function(){ 
     $.ajax({ 
      type: "POST", 
      url: "test2.php", 
      success: function(data) { $("#here").html(data); } 
     }); 
}); 
</script> 

test2.php:

while($content = file_get_contents('https://www.example.com?id='.$i)) { 
    if($i !== 10) { 
     echo $i; 
    }else{ 
     break; 
    } 
    $i++; 
} 
+0

腳本在瀏覽器中運行需要多長時間才能運行? – Akshay

+0

@Akshay字面上只有幾秒鐘。然而,這是一個例子 - 我可以讓'$ i'高達10000,這需要一段時間。我也壓縮了代碼。 –

+0

如果你的時間間隔是相同的,只需使用$ interval或$ timeout –

回答

0

沒有到有,直到腳本結束的PHP腳本生成的輸出穩定的方式。

如果你需要一個倒計時,你可以把while循環在JavaScript和有它調用PHP腳本的東西,如:

test2.php?i=1 

然後

test2.php?i=2 

+0

如果代碼完全用JS寫成,可以這樣做嗎? –

+0

或Node.js?會這樣做嗎? –

+1

這不是PHP的限制,而是Web服務器用來與PHP通信的API。只要它在代碼中打印語句時,PHP本身就會生成輸出。通常,這樣做是有充分的理由的,你不希望不完整的HTML標籤被髮送到瀏覽器。 – Devon

1

您也可以使用.queue().append()

按順序請求每個文件
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]; 

$({}).queue("ajax", $.map(arr, function(item, i) { 
    return function(next) { 
    return $.ajax({ 
       type: "POST", 
       url: "test2.php", 
       data: {n:item} 
      }) 
      .then(function(data) { 
      $("#here").append(data); 
      next(); 
      }); 

    } 
})).dequeue("ajax") 

PHP

if (isset($_POST["n"])) { 
    $content = file_get_contents("https://www.example.com?id=" . $_POST["n"]); 
    echo $content 
} 
+0

您好我會在早上嘗試您的答案,謝謝 –

+0

@bobjomes jsfiddle https://jsfiddle.net/uL9jc0jb/,鏈接'.promise()。then()'當隊列中的所有函數完成時調用函數https: //jsfiddle.net/uL9jc0jb/1/ – guest271314

+0

我將如何增加請求的數量? –

0

我真的覺得async將幫助你在這裏。你可以試試這個代碼嗎?

<script> 
$(document).ready(function(){ 
     $.ajax({ 
      type: "POST", 
      url: "test2.php", 
      async: false, 
      success: function(data) { $("#here").html(data); } 
     }); 
}); 
</script> 
+0

嗨我會在早上試試你的答案謝謝 –

+0

@bobjomes 沒問題。只要讓我知道它是否對你有幫助。 – Akshay