【问题标题】:Sending Ajax Request to PHP not working向 PHP 发送 Ajax 请求不起作用
【发布时间】:2017-11-06 03:18:44
【问题描述】:

我正在尝试向我的 PHP 文件发出 ajax 请求。

当我的“国家/地区”选择选项菜单更改时,会发生 ajax 请求。结果假设是一个名为“州省”的新选择选项菜单,选项将基于“国家”选择选项菜单中的选择。

这就是我想要的样子:

我遇到的问题是,当 ajax 向 PHP 发出请求时,PHP 似乎返回了一个空数组:

有谁知道可能出了什么问题?

谢谢!

选择选项的 HTML:

<select name="Country" class="form-control input-sm" id="Country">

</select>

带有 onchange 函数的 Ajax 代码:

$("#Country").on("change",function(){
    var val = $('#Country').val();
    performAJAX(val,'Country','StateProvince');
});

function performAJAX(choice,prevSelect,newSelect){
    $.ajax({
            type: "post",
            url: "select-creation.php",
            data: {choice: choice, prevSelect: prevSelect,newSelect: newSelect},
            dataType: "json",
            success: function(data){
                var obj = $.parseJSON(data);
                console.log("meow meow");
            }
    });
}

PHP 代码:

<?php session_start();
    try{
        $choice = $_POST['choice'];

        $prevAttri = $_POST['prevSelect'];

        $nxtAttri = $_POST['newSelect'];

        $data = array();

        $sql = 'SELECT '.$nxtAttri.' FROM agents WHERE '.$prevAttri.' = :userChoice';
        include_once $_SERVER['DOCUMENT_ROOT'].'/inc/Database.class.php';
        $db = new Database();
        $conn = $db->getConnection();
        $query = $conn->prepare($sql);
        $query->bindValue(':userChoice',$choice,PDO::PARAM_STR);

        if($query->execute()){
            $data = $query->fetchAll(PDO::FETCH_ASSOC);
        }//stmt

        return json_encode($data);
    }catch(PDOException $e){
        echo $e->getMessage();
    }
?>

【问题讨论】:

  • “喵喵”控制台日志旨在作为测试,看看我是否从 php 文件中获得了成功的数据响应
  • 我不是PHP开发者,但是php应该使用echo json_encode($data)而不是返回它?
  • 你是从那里获取数据,可能没有数据返回
  • @guradio 我刚刚做了一个快速研究(stackoverflow.com/questions/9387765/…),看起来不一样,return 用于函数和 echo 打印它,所以由于它是一个 ajax,它需要身体作为响应的答案,如果他是returning 某事,它可能不是反映在屏幕截图响应上的 json 类型(它显示一个 php 对象)。另外,也许您应该需要将正确的标头添加到 PHP 文件中
  • 你肯定要echojsonreturn不一样写。

标签: javascript php jquery html ajax


【解决方案1】:

您的代码return json_encode($data); 似乎没有任何内容或无效,因为您的代码没有使用函数。

只需使用echo json_encode($data);

在ajax端,你不需要使用$.parseJSON(data);,因为你已经指定了dataTypejson,它会立即将PHP的数据响应转换为对象类型。

【讨论】:

  • 我正要写同样的东西:P,看来你打字速度很快
  • 哇,我现在感觉很笨。谢谢,成功了!并感谢直接在我的帖子下方发表评论的人。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-17
  • 1970-01-01
  • 2018-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多