Laravel:更改文本框上的元素编辑

时间:2017-03-31 20:39:37

标签: javascript php laravel laravel-5.4

第一个Laravel项目。 我想制作一个表单,如果我在textbock中写一些东西(例如条形码),代码在数据库中搜索并打印出一个值(例如价格)

我的代码到目前为止:

观点:

{{ Form::open(array('url' => '/product/$barcode'))}}
<script>
function showProduct(str) {
    if (str == "") {
        document.getElementById("txtHint").innerHTML = "";
        return;
    } else {
        if (window.XMLHttpRequest) {
            // code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp = new XMLHttpRequest();
        } else {
            // code for IE6, IE5
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.onreadystatechange = function() {
            if (this.readyState == 4 && this.status == 200) {
                document.getElementById("txtHint").innerHTML = this.responseText;
            }
        };
        xmlhttp.open("GET","script/getproduct.php?q="+str,true);
        xmlhttp.send();
    }
}
</script>

//If I don't set the @vars first I get "unknown variable" error
<?php $name=0; $price=0; ?>
<table>
<tr>
<td>{{Form::text('barcode', null, ['onchange'=>'showProduct(this.value)'])}}</td>
<td><div id="txtHint">Name: {{ $name }}</div></td>
<td><div id="txtHint">Price: {{ $price }}</div></td>
</tr>
</table>
{{Form::close()}}

showproduct.php:

<?php
$q = intval($_GET['q']);

$sql = DB::select('select * from inventory where barcode = ? LIMIT 1', [$q]);

$price = $sql[0]->price;
$name = $sql[0]->name;
?>

但是当我把条形码放到文本字段时,我仍然在字段中得到0。我做错了什么?

1 个答案:

答案 0 :(得分:1)

第一个问题,您在DOM文档中使用多ID,这是完全错误的。

<td><div id="txtHint">Name: {{ $name }}</div></td>
<td><div id="txtHint">Price: {{ $price }}</div></td>

必须如下:

<td><div id="nameHint">Name: {{ $name }}</div></td>
<td><div id="priceHint">Price: {{ $price }}</div></td>

然后,在你的php方面,你将需要echo一些数据,并通过将其编码为json来发送多个数据最佳方法,然后从客户端解码该json并使用它将其解析为DOM元素的JavaScript。

所以,在你的php代码中,修改它如下:

$price = $sql[0]->price;
$name = $sql[0]->name;
echo json_encode(array("price" => $price, "name" => $name));

然后从您的客户端,按如下方式解码该json:

if (this.readyState == 4 && this.status == 200) {
    var jsonObject = JSON.parse(this.responseText);
    document.getElementById("priceHint").innerHTML = jsonObject['price'];
    document.getElementById("nameHint").innerHTML = jsonObject['name'];
}