2017-11-03 12 views
-2

ユーザがウェブページ(main.php)からテストケースを提出できるようにするプログラムを用意しています。ウェブページはajaxリクエストを送信してMySQLにローを挿入しますユーザーデータ(insert.php)はdone=0です。次に、各サーバのテストケースを処理/実行する(各サーバにsshを実行し、サーバ上でテストを実行する)crontab上で実行するリスナスクリプト(testexec.php)を持って、テスト後に行をdone=1に更新する完成されました。これまでのところ、私のコードでは、行の挿入が完了した後すぐに私のAjaxコールが終了し、ユーザーに待つように指示します。リスナースクリプトがテストケースで終了したときにユーザーに知らせ、その結果をページに表示できるようにしたい。リスナースクリプトが完了し、ユーザに通知するためのAjaxコール

どうすればいいですか?私はmain.phpで2回のajax呼び出しが必要ですか?

main.php

</style> 
</head> 
<body> 
<div id="gatewayInput"> 
<form method="post"> 
     <input type="text" id="server" name="server" placeholder="Server Name"><br><br> 
     <?php 
     include("search.php"); 
     ?>  
</div> 
<div class="box1"> 
<label class="col">TEST1/TEST2</label> 
<span class="col"> 
    <input type="radio" name="option" id="r1" value="1" /> 
    <label for="r1">TEST1</label> 
    <input type="radio" name="option" id="r2" value="2" /> 
    <label for="r2">TEST2</label> 
</span> 
<span class="col"> 
    <input type="submit" class="button" name="submit"/> 
</span> 
</form> 
</div> 

<script src ="../js/jquery-3.2.1.min.js"></script> 
<script src="../js/jquery-ui.min.js"></script> 
<script type="text/javascript"> 

    //auto seatch function 
    $(function() { 
     $("#server").autocomplete({ 
      source: 'search.php' 
     }); 
    }); 

    //button click function 
    $(".button").click(function(event){ 
     if ((document.getElementsByName("gateway")[0].value == '')) { 
       alert('Server Required!'); 
     return false; 
    } 
     else if (document.querySelectorAll('input[type="radio"]:checked').length < 1) { 

       alert('Please Choose Air/Ground Value!'); 
       return false; 
     } 
     else { 

      event.preventDefault(); 

      //POST the data to insert.php 
      $.ajax({ 
       url:"insert.php", 
       type: "POST", 
       data: { 
        gateway: $("#gateway").val(), 
        option: $('input[type=radio]:checked').val() 
       }, 
       dataType: "text", 
       success:function(result){ 
        $('#div0').html("Your test is being processed, please wait.."); 
        //clearInterval(interval); 
        console.log(result); 
        alert('Test case submitted!'); 
       } 
      }); 
      return true; 
     } 
    }); 

答えて

0

戻りAJAX要求の 'responseText' の値の値。そうすれば、それは同期的です。

//POST the data to insert.php 
     return $.ajax({ 
       url:"insert.php", 
       type: "POST", 
       data: { 
        gateway: $("#gateway").val(), 
        option: $('input[type=radio]:checked').val() 
       }, 
       dataType: "text" 
      }).responseText 
+0

これは、rからresponseTextを返しますinsert.phpのesult? – kkmoslehpour

1

あなたのいずれか、数秒ごとにサーバーをポーリングし、サーバはその準備ができて、一度結果を返す必要があり、成功の機能の一部としてAJAX呼び出しの間隔をクリアするには、時限間隔で別のAJAX呼び出しを設定したり、サーバーへのイベントリスナー/ websocket接続を作成し、使用可能になったらサーバ出力をフラッシュする

または、テストスクリプトの実行をphp ajaxハンドラスクリプトに組み込み、必要に応じてajax呼び出しのタイムアウトを増やしてくださいテストスクリプトが終了するまで出力を返します。

+0

こんにちは、私は間隔の投票は良い考えのように思える。テストが完了すると、サーバ上にログ出力が作成され、実際に結果が返されます。どのように結果を私のajax(main.php)に返すのですか? – kkmoslehpour

+1

出力をデータベースにも保存しますか?関連するテスト結果を返すことができるようにユーザーを特定するには、何らかの方法を実装する必要があります。 main.phpにはPHPがまったく含まれていないようです。物事を単純にするために、report.phpを作成し、2番目のajax呼び出しでポーリングすることをお勧めします。テストが終了していない場合は0を返し、テストが終了した場合は結果のhtmlを返します。データが== 0の場合、ページの要素にデータを挿入しません。 – miknik

+0

実際には、ライナーは1つあります。 'main.php'のautosearchのためのphp私はちょうど私のコードを編集し、上の完全なコードを入れてください。しかし、私はちょっとあなたが言っているものを得る。しかし、私はまだ、reports.phpがどのようにテストの結果を得ようとしているか、頭を悩ますことはできません。私のtestexec.phpは基本的にテストを実行した後、ストリームが閉じられるまでストリームをフラッシュします。結果をサーバー上のテキストファイルに出力する別のスクリプトがあります。 'reports.php'は、出力ストリームが終了してレポートがあるとき、どのくらい正確に分かりますか?あなたはmysqlに格納してreports.phpに問い合わせるように言っていますか? – kkmoslehpour

関連する問題