【问题标题】:Passing javascript value to php and back将javascript值传递给php并返回
【发布时间】:2014-05-30 20:19:01
【问题描述】:

我在将 javascript 值传递给 php 并返回时遇到了一些问题。

我的想法是,我有一个表单,用户填写邮政编码,然后 (onBlur) 在两个不同的输入字段中显示正确的街道和城市。街道和城市是通过 POST 方法从外部 php 文件 (getAddress.php) 收集的。

我知道 php 脚本返回了正确的值并且 complete() 函数被称为 onBlur,但我不知道该值是否被传递到 php 脚本并返回。

Javascript

<script language="javascript">
    function complete() {
        var postalCode = document.getElementsByName("postalCode")[0].value;
        if(postalCode.length === 6) {
            var dataString = "postalCode=" + postalCode;
            $.ajax({
                type: "POST",
                url: "getAddress.php",
                dataType: "html",
                data: dataString,
                success: function(results) {
                    var json = JSON.parse(results);
                    document.getElementById("street").value = json.street;
                    document.getElementById("city").value = json.city;
                }
            });
        }
    }
</script>

getAddress.php

<?php

    $postalCode = $_POST['postalCode'];
    $postalCode = substr_replace($postalCode, ' ', 4, 0);
    $sql = 'SELECT * FROM postalCodes WHERE postalCode="'.$postalCode.'"';
    $res = $con->query($sql);
    $res->data_seek(0);
    while($row = $res->fetch_assoc()) {
        $ID = $row['ID'];
        $street = $row['street'];
        $city = $row['city'];
        $results[] = array('ID' => $ID, 'street' => $street, 'city' => $city);
    }

    echo json_encode($results);

?>

HTML

<input name="postalCode" type="text" maxlength="6" onBlur="complete()" /><br />
<input name="street" id="street" type="text" disabled /><br />
<input name="number" type="text" maxlength="6" /><br />
<input name="city" id="city" type="text" disabled /><br />

【问题讨论】:

  • 您将参数称为“成功”函数“结果”,但随后在对JSON.parse() 的调用中将其称为“数据”。
  • @Pointy 很抱歉,但这仍然不能解决问题。
  • 请定义您的问题。
  • 您的查询中存在 SQL 注入问题:您应该转义 postalCode...
  • 我会检查你的浏览器控制台,大多数人都有一个“网络”选项卡,可以让你检查所有 http 请求、响应、POST 值、标头等。你可以在那里查看你的正在发送/接收值。

标签: javascript php ajax parameter-passing


【解决方案1】:

dataType: "html", 更改为dataType: "json", 并且您的$resultsarray,因此您需要使用index

试试这个:

function complete() {
    var postalCode = document.getElementsByName("postalCode")[0].value;
    if (postalCode.length === 6) {
        var dataString = "postalCode=" + postalCode;
        $.ajax({
            type: "POST",
            url: "getAddress.php",
            dataType: "json",
            data: dataString,
            success: function(results) {
                document.getElementById("street").value = results[0].street;
                document.getElementById("city").value = results[0].city;
            }
        });
    }
}

当您收到 500 条内部服务器错误消息时,原因之一可能是
$con-&gt;query($sql) 失败,请确保 $con 已初始化且 tablefield 名称正确。

【讨论】:

  • 您的$resultsarray,因此您需要使用json[0].street 而不是json.street,答案已更新
  • 确实如此,但在大面积邮政编码覆盖多条街道的情况下,在街道字段中干扰“我得到的第一个”会有点惹恼用户呵呵。您可能最好检查您收到的回复数量,如果是一个则可以使用它,但如果您针对任何给定的邮政编码获得多条街道,则不要做任何事情。
猜你喜欢
  • 1970-01-01
  • 2013-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多