не может использовать функцию JavaScript в PHP - PullRequest
0 голосов
/ 28 ноября 2018

я использую laravel для своего бэкенда. У меня есть код JavaScript для сканирования Google, который является функцией с именем StartJob ()

У меня есть контроллер сканирования, у которого есть метод get, я хочу сделать это, когда явведите ключевое слово, которое ищет, если это не в обход базы данных, но если это в базе данных получает это и показать его, это мой HTML-код

<div id="numofkeywords"></div>
<form method="post" id="form">
    <textarea id="input" name="input"></textarea>
    <input type="button" id="startjob" onclick="GetCrawl();" value="Start Job">
    <textarea id="filter-positive" rows="4" onkeyup="FilterIfNotWorking()" placeholder="Positive Filter"></textarea>
    <textarea id="filter-negative" rows="4" onkeyup="FilterIfNotWorking()" placeholder="Negative Filter"></textarea>
</form>
<div id="message">

</div>

, и это мой метод контроллера, который вызвал в AJAX

public function getCrawl(Request $request) {
    $keyword = $request->input('input');
    //echo $keyword;
    if (count(DB::table('crawler')->where('name', 'like', "%{$keyword}%")->get()->toArray()) > 0) {
        $results = DB::table('crawler')->where('name', 'like', "%{$keyword}%")->get()->toArray();
        $count = count($results);
        // var_dump($results);
        foreach ($results as $result) {
            echo $result->data . "<br />";
        }
    } elseif (count(DB::table('crawler')->where('data', 'like', "%{$keyword}%")->get()->toArray()) > 0) {
        $results = DB::table('crawler')->where('data', 'like', "%{$keyword}%")->get()->toArray();
        $count = count($results);
        // var_dump($results);
        foreach ($results as $result) {
            echo $result->data . "<br />";
        }
    } else {
        echo '<script>';
        echo 'StartJob()';
        echo '</script>';
    }

}

но в последнем случае должна запускаться функция StartJob (), но разве я не могу это исправить?это потому, что я использую AJAX ??

, и это мой вызов AJAX

function GetCrawl() {
var form = document.getElementById("form");

var data = new FormData(form);

if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttpform = new XMLHttpRequest();
} else { // code for IE6, IE5
  xmlhttpform = new ActiveXObject("Microsoft.XMLHTTP");
}
var message = 'message';
xmlhttpform.onreadystatechange = function() {
  if (xmlhttpform.readyState < 4) {
    document.getElementById("message").value = "در حال پردازش ...";

  }
  if (xmlhttpform.readyState == 4 && xmlhttpform.status == 200) {

    document.getElementById("message").innerHTML = xmlhttpform.responseText;

  }
}
xmlhttpform.open("POST", "/laravel-master/crawler/public/api/getcrawl", true);
xmlhttpform.send(data);
}

1 Ответ

0 голосов
/ 28 ноября 2018

Вы, вероятно, ожидаете, что когда вы присваиваете ответ Ajax innerHTML, если этот ответ имеет тег script, то браузер выполнит этот сценарий.Это неправда.Он будет добавлен к содержимому HTML, но не будет выполнен.

Как можно заставить его выполнять требуемую функцию JS:

Вместо отправки тега script вклиенту, отправьте пустой ответ, а затем позвольте части JS проверить это условие (пустой ответ) и выполнить StartJob() явно.

Итак, в PHP полностью удалите этот блок else:

  else {
    echo '<script>';
    echo 'StartJob()';
    echo '</script>';
}

Идея состоит в том, чтобы просто ничего не делать в этом случае.

В JavaScript:

if (xmlhttpform.readyState == 4 && xmlhttpform.status == 200) {
    document.getElementById("message").innerHTML = xmlhttpform.responseText;
    if (xmlhttpform.responseText.trim().length === 0) StartJob();
}

Примечание о поддержке браузера:

Глядя на долгий путь, который вы, похоже, даже поддерживаете архаичные браузеры, например, IE6, вам нужно будет использовать что-то другое, чем .trim(), поскольку это не всегда поддерживается.Затем используйте .replace(/^\s+/, ''), который является левой обрезкой и достаточно для этого случая.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...