单击“停止”按钮时,完全停止运行功能

时间:2018-12-11 06:42:58

标签: php jquery codeigniter

我有要删除的URL列表。我从html表中获取这些URL,并在控制器函数中将它们置于foreach循环中。我有两个按钮,分别为“开始抓取”和“停止抓取”。

我正在运行一个剪贴函数,该函数编写在控制器中,并在单击开始剪贴按钮的按钮上由ajax函数调用。

现在,我的要求是,当我单击“停止抓取”按钮时,停止当前正在进行的进程。

我在Google上搜索了很多,并尝试使用Gloabal变量,会话等,但是,只有在完成第一个处于网络待定状态的进程后,所有这些工作才有效。

请帮助我,当我单击停止抓取按钮时如何停止当前的php进程。

下面是开始抓取的ajax调用功能

$("#get_data").click(function()
    {
        var values = new Array();
        $.each($("input[name='case[]']:checked"), function() 
        {
            var data = $(this).parents('tr:eq(0)');
            values.push({ 
                'weburl':$(data).find('td:eq(3)').text() , 
                'id' : $(data).find('td:eq(2)').text() , 
                'state':$(data).find('td:eq(6)').text()
            });
        });
        sendmyarray(values);
    });

    function sendmyarray(values)
    {
       var location = '<?php echo base_url()?>';
       var x = $.ajax({
            type: "POST",
            url: location+'admin/AdminController/getArrayAndScrap',
            data: {myData:JSON.stringify(values)},
            beforeSend: function() { 
                $("#stop_get_data").css("display", "block");
                $("#get_data").prop('disabled', true); // disable button
            },
            success: function (response) {   
                $("#get_data").prop('disabled', false);
                $("#stop_get_data").css("display", "none");
                console.log(response);
                if(response == 'stop')
                {
                    alert("Process Stopped");
                }   
                if(response == " ends")
                {
                    alert("Process completed. Please check the status of the URLs processed!");
                }

            }
        });
    }

//下面是控制器功能// //-获取所选行的url和state的数组的函数;并相应地报废

public function getArrayAndScrap()
        {
            if(isset($_POST['myData']))
            {
                $json = $_POST['myData'];
                $myDataArray = json_decode($json,true);
                foreach ($myDataArray as $url) 
                {
                    $status = $this->CommonModel->getSingleData('dtl_scrap_status','ws_detail',array('dtl_scrap_id' => $url['id']));

                    if( $status['dtl_scrap_status'] != 'Scrapped')
                    {
                        $ch = curl_init();
                        curl_setopt($ch, CURLOPT_HEADER, 0);
                        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 12); // 12 seconds
                        curl_setopt($ch, CURLOPT_URL, $url['weburl']);
                        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

                        $html = curl_exec($ch);
                        if($html === false)
                        {
                            $this->CommonModel->addData('ws_detail' , array('dtl_scrap_status' => curl_error($ch) , 'dtl_scrap_id' => $url['id'] , 'dtl_state' => $url['state'] , 'dtl_website' => $url['weburl']));
                            $this->CommonModel->updateData('ws_site_scrap_detail' , array('site_last_scrap_date' => date('Y-m-d')) , array('site_id' => $url['id']));
                    }
                        else
                        {
                            $doc = new DOMDocument();
                            @$doc->loadHTML($html);

                            $nodes = $doc->getElementsByTagName('title'); // TITLE
                            $metas = $doc->getElementsByTagName('meta'); // Meta
                            $head = $doc->getElementsByTagName('h1'); // H1

                            if(isset($nodes->item(0)->nodeValue))
                            {
                                $title = $nodes->item(0)->nodeValue;
                            }

                            if(isset($head->item(0)->nodeValue))
                            {
                                $heading = $head->item(0)->nodeValue;
                            }

                            if(isset($metas))
                            {
                                for ($i = 0; $i < $metas->length; $i++)
                                {
                                    $meta = $metas->item($i);
                                    if($meta->getAttribute('name') == 'keywords') // Keyword
                                    $keywords = $meta->getAttribute('content');

                                    if($meta->getAttribute('name') != '')
                                    {
                                        if($meta->getAttribute('name') == 'description') // meta description
                                        {
                                           $description = $meta->getAttribute('content');
                                        }
                                    }elseif($meta->getAttribute('property') != '')
                                    {
                                        if($meta->getAttribute('property') == 'og:description') // meta Og:description
                                        {
                                            $OgDescription = $meta->getAttribute('content');
                                        }
                                    }
                                }   
                            }
                            curl_close($ch);

                            if(isset($url['state']))
                            {
                                $addDtl['dtl_state'] = $url['state'];
                            }
                            if(isset($heading))
                            {
                                $addDtl['dtl_program_name'] = $heading;
                            }
                            if(isset($title))
                            {
                                $addDtl['dtl_program_provider'] = $title;
                            }
                            if(isset($description))
                            {
                                $addDtl['dtl_program_description'] = $description;
                            }elseif(isset($OgDescription))
                            {
                                $addDtl['dtl_program_description'] = $OgDescription;
                            }
                            if(isset($keywords))
                            {
                                $addDtl['dtl_program_keywords'] = $keywords;
                            }
                            if(isset($url['weburl']))
                            {
                                $addDtl['dtl_website'] = $url['weburl'];
                            }
                            if(isset($url['id']))
                            {
                                $addDtl['dtl_scrap_id'] = $url['id'];
                            }
                            $addDtl['dtl_scrap_status'] = 'Scrapped';
                            if($this->CommonModel->addData('ws_detail' , $addDtl))
                            {
                                $this->CommonModel->updateData('ws_site_scrap_detail' , array('site_last_scrap_date' => date('Y-m-d')) , array('site_id' => $url['id']));
                            }else
                            {
                                // echo "Error";exit();
                            }                   
                        } // End of else    

                    } // End of status check
                    else
                    {
                        $this->CommonModel->updateData('ws_site_scrap_detail' , array('site_last_scrap_date' => date('Y-m-d')) , array('site_id' => $url['id']));
                        // echo "alscrapped";exit();
                    }
                } // End of foreach
                echo "ends";
            } // End of if(isset)
        }

///我在场景下想要的东西(AJAX CALL)//

$('#stop_get_data').click(function()
    {
        return false (from the function which is in running state after click event of start scrapping);
    });

任何帮助对我来说都很重要。 谢谢

1 个答案:

答案 0 :(得分:0)

不可能用javascript终止php脚本。 PHP脚本将继续运行其循环,直到完成为止。 PHP在服务器端执行,而javascript在浏览器中执行。也许有一种方法可以对套接字进行此类操作,但我对它们的了解还不足以为您提供有关如何使用套接字的建议。

您可以做的是在javascript端运行循环,并为每次迭代单独调用php函数。这样一来,您就可以随时使用javascript停止该过程。