【问题标题】:How to supply the string created as a results of PHP to my javascript如何将作为 PHP 结果创建的字符串提供给我的 javascript
【发布时间】:2019-01-03 18:33:40
【问题描述】:

我想在变量 selector 上指定的输入字段中创建一个单词检查脚本。单词列表是从数据库中提取的。我已经为数据库提供了查询。数据库的结果是

>Array
>(
>[0] => Skype
>[1] => Phone
>[2] => Whatsapp
>[3] => Mobile
>[4] => Gmail
>[5] => email
>[6] => viber
>)

我正在使用上面的这些词在我的 javascript 中为 if 语句创建字符串。 $a 的结果是

 $(selectors)[0].value.search(/Skype/i) !== -1 || $(selectors) 
   [0].value.search(/Phone/i) !== -1 || $(selectors) 
   [0].value.search(/Whatsapp/i) !== -1 || $(selectors) 
   [0].value.search(/Mobile/i) !== -1 || $(selectors)>> 
   [0].value.search(/Gmail/i) !== -1 || $(selectors) 
   [0].value.search(/email/i) !== -1 || $(selectors) 
   [0].value.search(/viber/i) !== -1 

之后我尝试将此字符串作为条件传递给脚本,它每次都会执行警报。我希望它仅在单词匹配时执行。

我已经试过写了

$(selectors)[0].value.search(/Skype/i) !== -1 || $(selectors) 
[0].value.search(/Phone/i) !== -1 || $(selectors) 
[0].value.search(/Whatsapp/i) !== -1 || $(selectors) 
[0].value.search(/Mobile/i) !== -1 || $(selectors) 
[0].value.search(/Gmail/i) !== -1 || $(selectors) 
[0].value.search(/email/i) !== -1 || $(selectors) 
[0].value.search(/viber/i) !== -1

在 if 语句中,它工作得非常好,但我想要这样做的原因是我不想回到代码并在每次我想添加单词时在 if 语句中添加另一行

<?php
//testing
$words = array();
$a='';
foreach($db->getRecordSet('SELECT * FROM conversationKeywords WHERE     conStatus = :conStatus',array(':conStatus'=>1)) as $results){
    array_push($words,$results['conKeyWord']);
}
/* //DEVELOPER DEBUGGIN PURPOSES ONLY, UNCOMMENT ON DEVELOPER MACHINE
echo '<pre>';
print_r($words);
echo '</pre>';
*/
foreach($words as $values){
    if(!next($words)) {
        $a.= '$(selectors)[0].value.search(/'.$values.'/i) !== -1';
    }
    else{
        $a.= '$(selectors)[0].value.search(/'.$values.'/i) !== -1 || ';
    }
}
//echo $a;
?>

<script>
    var selectors = "#msg_text,#Message_Text,#job-desc";
    var conditions = <?php echo json_encode($a) ?>;
    console.log(conditions);
    $("body").on("keyup",selectors,function(conditions){

        if(warning !== true){

            //var v = $('#msg_text').val();

            if (conditions){

                //alert("Warning! For safety and quality     assurance, Please note that we kindly request all parties to communicate only     through us.");

        alertify
        .alert("Warning!","For safety and quality assurance,we     kindly request that all parties communicate ONLY through us.", function(){
        alertify.message('OK');});
            //warning = true;
        }
    }
});

</script>

【问题讨论】:

  • 我认为JSON 可能是您解决方案的一部分。使用 PHP 将 JSON 输出到您的页面。然后引用 PHP 传入的内容实现所需的 javascript 代码。
  • 如果您想将数据传递给 javascript,请使用 json_encode。但是你的逻辑有点绕。在后端做搜索逻辑会更容易。只需创建接受单词并返回是否找到的方法。然后,当用户提交表单或进行更改时,您可以将此方法与 AJAX 一起使用...

标签: javascript php


【解决方案1】:

我建议使用正则表达式更改,而不是为每个搜索词一遍又一遍地写$(selectors)[0].value.search(/SEARCHTERM/i) !== -1

$(selectors)[0].value.search(/(SEARCHTERM_1|SEARCHTERM_2|SEARCHTERM_3)/i) !== -1

您可以使用 PHP implode 函数从您的 $words 变量创建搜索词字符串。如果你想获取当前焦点输入元素的值,你也应该使用$(this).val() 而不是$(selectors)[0].value

你的完整代码应该是这样的:

<?php
//testing
$words = array();
foreach($db->getRecordSet('SELECT * FROM conversationKeywords WHERE  conStatus = :conStatus',array(':conStatus'=>1)) as $results){
    $words[] = $results['conKeyWord'];
}
?>

<script>
    var selectors = "#msg_text, #Message_Text, #job-desc";
    $("body").on("keyup", selectors, function(){
        if ($(this).val().search(/(<?= implode("|", $words) ?>)/i) !== -1) {
            alertify.alert("Warning!","For safety and quality assurance,we     kindly request that all parties communicate ONLY through us.", function(){
                alertify.message('OK');
            });
        }
    }
</script>

注意:$words[] = $results['conKeyWord'];array_push($words,$results['conKeyWord']); 相同,但更快更简洁。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 2020-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多