2016-08-27 1 views
1

配列の中に数字のリストがあります。配列内の各番号で1つずつ、外部Webサイト(URL変数)にリクエストが行われ、Webページの内容が表示されます。配列内の数字の集合全体をリストするのではなく、特定の数になるまで自動的に1を加算します。

配列にすべての数字(1,2,3,4,5,6,7,8,9)をリストするのではなく、test2.phpにリクエストが行われるたびに1を加える方法数字は9です(これは配列の最後です)?

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") 

test2.php

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

あなたのAJAXリクエストで 'n:9'をデータとして送信し、PHPで1から9のループを作成します – RST

+0

なぜあなたは 'https://www.example.com/?id= 'に対してGETを実行しませんか? –

+0

@ChrisMagnussenあなたは純粋なPHPについて話していますか?はいの場合は、すべてのリクエストが行われるのを待たずに、リクエストが行われるたびにページの内容を表示するコードを作成することはできません。 –

答えて

0

この

<script src="https://code.jquery.com/jquery-1.12.4.js"></script> 
<script> 
var i = 1; 
jQuery(document).ready(function(){ 
    function callAjax() { 
     $.ajax({ 
      type: "POST", 
      url: "test2.php", 
      data: {n:i}, 
      success:function(data){ 
      $("#here").append(data); 
      if (i++ < 9) { 
       callAjax(); 
      } 
      } 
     });   
    } 
    callAjax(); 
}); 

を試してみてくださいに他の方法があり、あなたがHTML

+0

jquery-1.12.4。js:569 Uncaught TypeError: 'in'演算子を使用して1で 'length'を検索することはできません –

+0

また、JavaScriptは私の最高のコーディング言語ではありません(私は別の質問からコードのほとんどを得ています)あなたの答えに(各要求の後に内容が表示されます)? –

+0

詳細なコードを教えてください。それから私はあなたを助けることができます。 – SCC

0

に#here div要素を持っていることを確認してください。これに従うあなたが収集したコンテンツを表示するの世話をするAJAXの成功機能に続いて

if (isset($_POST["n"])) { 
    $pages = array(); 
    $number = intval($_POST['n']); 

    if ($number > 0) { 
    for($i = 1; $i <= $number; $i++) { 
     $pages[] = file_get_contents("https://www.example.com?id=" . $i); 
    } 
    } 
    return $pages; 
} 

:あなたのシナリオでは、あなたのPHPファイルは次のようになります。

+0

私は本当に私のPHPをそのまま保ち、JSを修正することを望んでいました –

1

なぜループしないのですか?

var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]; 

for(var i = 0; i < arr.length; i++) { 

    $.ajax({ 
     type: "POST", 
     url: "test2.php", 
     data: {n:arr[i]} 
    }) 
    .then(function(data) { 
     $("#here").append(data); 
    }); 

} 

もちろん、表示順序はこのようにしておきますが、オリジナルの関数は配列の順序を維持します。それが必要条件だ場合は、ループ内での関数の配列を作成して、そのように、$の.queue()関数に渡したいと思います:

var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]; 
var q = []; 

for(var i = 0; i < arr.length; i++) { 
    q.push((function(i){ 
     return function(next){ 
      $.ajax({ 
       type: "POST", 
       url: "test2.php", 
       data: {n:arr[i]} 
      }) 
      .then(function(data) { 
       $("#here").append(data); 
       next(); 
      }); 
     } 
    })(i)); 
} 
$({}).queue("ajax", q).dequeue("ajax"); 

配列を削除し、ちょうどループを使用してインデックス:

var q = []; 
var q_start = 1; 
var q_end = 9; 

for(var i = q_start; i <= q_end; i++) { 
    q.push((function(i){ 
     return function(next){ 
      $.ajax({ 
       type: "POST", 
       url: "_test2.php", 
       data: {n:i} 
      }) 
      .then(function(data) { 
       $("#here").append(data); 
       next(); 
      }); 
     } 
    })(i)); 
} 
$({}).queue("ajax", q).dequeue("ajax"); 
+0

'var arr = [1、 2、3、4、5、6、7、8、9] –

+0

私は 'var arr = 1'だけを要求し、次に要求があるたびに番号を増やすことを覚えておいてください。 –

+0

もちろん、ループカウンタを使うことができます。私は配列にいくつかの重要性があると仮定し、それは設定/カスタマイズの余地を残す。私の答えに別のバージョンのコードを追加して、私に数分を与えてください。 –

1

ここでは、コードです:

$({}).queue("ajax", $.map(new Array(9), function(item, i) { // ← notice here 
    return function(next) { 
    return $.ajax({ 
       type: "POST", 
       url: "test2.php", 
       data: {n: i + 1 } // ← and here 
      }) 
      .then(function(data) { 
      $("#here").append(data); 
      next(); 
      }); 

    } 
})).dequeue("ajax"); 

何が変わったが、私が代わりにアイテムのindex (i) + 1リファレンスを使用したことです。これは、0からi開始ために動作し、それはarray.length - 1をリーチャー、この場合、Iはループのために必要と$.map

のパラメータとして9つの不定要素(new Array(9))のアレイを通過しなくなるまで1だけインクリメントしますコードはあまり正確ではありませんが、あまりコードを変更することなくあなたの目的に合っています

関連する問題