按顺序Ajax请求

时间:2017-04-27 14:49:51

标签: ajax asynchronous file-get-contents

我正在制作litte应用程序以通过URL获取页面并检查其标题。 我需要逐行检查URL,用户粘贴在textarea中。 流程顺序: 检查网址>追加对页面的响应>然后检查下一个网址......
这是我的代码:

HTML:

<textarea id="textarea" name="urlLine"></textarea>
<button type="button" name="action" id="check">Check IT!</button> 

Js:

 function getResp(req) {

    var uri = req.shift();

    $.ajax({
        type: 'POST',
        url: 'r.php',
        async: true,
        data: {'uriLine': uri},
        success: function (msg) {
            $('.collection').append(msg);
            $('body').animate({
                scrollTop: height,
            }, 500)
        },
        fail: function (msg) {
            console.log(msg);
        }
    });

    if (typeof uri !== 'undefined' && uri.length > 0) {
        setTimeout(getResp, 5, req);
    } else {
       alert('Finish');
    }
  }

$(document).ready(function () {
    $('#check').click(function () {
       var uris= $('textarea').val().split('\n');
        getResp(uris);

    });

PHP:

sleep(5); // I don't know why i'm adding. Just wait for performance.
$title = 'title_i_searching';
$adress = $_POST['uriLine'];
if($check->chekURL('https://'.$adress) == $title){
echo ' OK';
}else{
echo 'NOT OK';
}

PHP CLASS:

class checkES
 {
 public  $url;
 public function chekURL($url){
    $arrContextOptions=array(
        "ssl"=>array(
            "verify_peer"=>false,
            "verify_peer_name"=>false,
        ),
        "http"=>array(
            "timeout"=> 5
        )
    );
$str=
file_get_contents($url,false,stream_context_create($arrContextOptions));
    if(strlen($str)>0){
        $str = trim(preg_replace('/\s+/', ' ', $str)); 
        preg_match("/\<title\>(.*)\<\/title\>/i",$str,$title);
        return $title[1];
    }
}

public function parseByLine($content){

    $lines = preg_split('/\r\n|[\r\n]/', $content);
    return $lines;
}
}

但是当我运行此代码时,例如;在第5个网页上搜索20个网址提醒'完成'。但追加功能仍在继续。 有时,页面崩溃了。

我找不到健康的方法。

我希望我能解释一下。抱歉语言不好。

1 个答案:

答案 0 :(得分:1)

尝试移动代码以处理success函数中的下一个uri,如下所示:

function getResp(req) {

    var uri = req.shift();

    $.ajax({
        type: 'POST',
        url: 'r.php',
        async: true,
        data: {'uriLine': uri},
        success: function (msg) {
            $('.collection').append(msg);
            $('body').animate({
                scrollTop: height,
            }, 500);
            if (typeof uri !== 'undefined' && uri.length > 0) {
                setTimeout(getResp, 5, req);
            } else {
               alert('Finish');
            }
        },
        fail: function (msg) {
            console.log(msg);
        }
    });
}