不能在php中使用javascript函数

时间:2018-11-28 19:23:01

标签: javascript php ajax

我在后端使用laravel 我有一个用于搜寻Google的JavaScript代码,该函数名为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 :(得分:0)

您似乎希望将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+/, ''),它是左装饰,对于这种情况足够了。