Как перенаправить php страницу, используя ajax с данными? - PullRequest
0 голосов
/ 07 февраля 2020

Я знаю, что здесь много вопросов с тем же названием, что и у меня, но я не могу решить свою проблему, используя ответы, предоставленные для них.
Программа должна перенаправить страницу к результату распознавания после получения скриншот карты Google. В результате я могу видеть результат только через сеть> обработка. php> предварительный просмотр.
Я также пытался использовать window.location.href = "your-url-to-redirect-to"; на ajax, но это привело бы к тому, что на странице было бы пропущено множество ошибок. данные.
Ниже приведен индекс. php

<body>
<input type='button' class="btn btn-success" id='but_screenshot' value='Take screenshot' onclick='screenshot();'><br/>
<script type="text/javascript">
    function screenshot() {
        var transform = $(".gm-style>div:first>div:first>div:last>div").css("transform");
        var comp = transform.split(",")
        var mapleft = parseFloat(comp[4])
        var maptop = parseFloat(comp[5])
        $(".gm-style>div:first>div:first>div:last>div").css({ 
            "transform":"none",
            "left":mapleft,
            "top":maptop,
        });
        html2canvas(document.getElementById('map'), {
            useCORS: true
        }).
        then(function(canvas) {
                var base64URL = canvas.toDataURL('image/jpeg').replace('image/jpeg', 'image/octet-stream');
                $.ajax({
                    url: 'processing.php',
                    type: 'post',
                    data: {image: base64URL},
                    success: function(data){
                        console.log('Upload successfully');
                    }
                });
            }
        );
    }
</script>
</body>

Это processing.php

<?php
// upload screenshot
$image = $_POST['image'];
$location = "uploads/";
$image_parts = explode(";base64,", $image);
$image_base64 = base64_decode($image_parts[1]);
$filename = "screenshot_".uniqid().'.png';
$file = $location . $filename;

file_put_contents($file, $image_base64);
// end

uploadToApi($file);

function uploadToApi($target_file){
    require __DIR__ . '/vendor/autoload.php';
    $fileData = fopen($target_file, 'r');
    $client = new \GuzzleHttp\Client();
    try {
    $r = $client->request('POST', 'https://api.ocr.space/parse/image',[
        'headers' => ['apiKey' => '[API_KEY]'],
        'multipart' => [
            [
                'name' => 'file',
                'contents' => $fileData
            ]
        ]
    ], ['file' => $fileData]);
    $response =  json_decode($r->getBody(),true);
    if(empty($response['ErrorMessage'])) {
?>
<html>
    <head>
    <title>Result</title>
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.0/css/bootstrap.min.css">
        <script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js'></script>
        <script src='https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.0/js/bootstrap.min.js'></script>
    </head>
    <body>
        <div class="form-group container">
            <label for="exampleTextarea">Result</label>
            <textarea class="form-control" id="exampleTextarea" rows="30">
            <?php
                foreach($response['ParsedResults'] as $pareValue) {
                    echo $pareValue['ParsedText'];
                }
            ?></textarea>
        </div>
    </body>
</html>
<?php
    } else {
        header('HTTP/1.0 400 Forbidden');
        echo $response['ErrorMessage'];
    }
    } catch(Exception $err) {
        header('HTTP/1.0 403 Forbidden');
        echo $err->getMessage();
    }
}
?>

1 Ответ

0 голосов
/ 07 февраля 2020

Чтобы не менять все, вы можете просто вернуться с обработки. php только:

<div class="form-group container">
        <label for="exampleTextarea">Result</label>
        <textarea class="form-control" id="exampleTextarea" rows="30">
        <?php
            foreach($response['ParsedResults'] as $pareValue) {
                echo $pareValue['ParsedText'];
            }
        ?></textarea>
    </div>

и затем в индекс. php в

success: function (data) {
        document.getElementById("Any div").innerHTML + = data
    // or to body
    document.body.innerHTML = document.body.innerHTML + data;
    }

Они должны быть включены в индекс. php

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.0/css/bootstrap.min.css">
    <script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js'></script>
    <script src='https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.0/js/bootstrap.min.js'></script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...