使用jQuery AJAX将数据传递给PHP脚本

时间:2016-05-08 12:56:38

标签: php jquery mysql ajax

下面包含HTML,AJAX和PHP。在介绍AJAX之前,所有功能都是(从下面的HTML中删除了表单标签和PHP处理值)。

从MySQL查询中填充下拉列表(类别)。当用户选择一个选项时,我想通过ajax将ID传递给PHP脚本(index.php)来运行MySQL查询以填充另一个下拉列表(子类别)。

Chrome控制台日志表明ajax正在正确传递ID。

Firebug还显示它正在传递并且URL正确(index.php?business_category_id = ajax-passed value)。如果传递GET变量,并且我的PHP脚本正在寻找它,为什么脚本没有响应?为什么没有收到价值?我无法回应它,所以我知道它没有收到。

ajax脚本在js / script.js中,index.php(我的控制器)在根目录中,而带有html(buy-a-biz.php)的页面在根目录中并包含在php中脚本(见下文)。

如果有人可以提供帮助,我会非常感激。我是使用jQuery ajax的新手。

HTML

<select name="category" id="business-category">
    <option value="all_categories">Select category</option>
    <?php foreach ($categories as $category): ?>
        <option value="<?php htmlout($category['id']); ?>"><?php htmlout($category['name']); ?></option>
    <?php endforeach; ?>
</select> 

AJAX。我也尝试使用$ .get和$ .post。

$(document).ready(function(){

    $("#business-category").change(function(){
        var category_id = $(this).val();
        console.log(category_id);

        $.ajax({
            type: 'GET',
            url: 'index.php',
            data: { business_category_id: category_id },
            success: function(category_id){
                $("#result").html(category_id + ' submitted successfully!');
            }
        });
    });
});

PHP。

if(isset($_GET['business_category_id'])){ 

    $category_id = htmlspecialchars($_GET['business_category_id']);

    include 'includes/dbconnect.php';

    try {
        $sql = "SELECT * FROM sub_category
                WHERE category_id = :category_id";
        $s = $db->prepare($sql);
        $s->bindValue(":category_id", $category_id);
        $s->execute();

        while($row = $s->fetch(PDO::FETCH_ASSOC)){
            $sub_categories[] = array(
                'id' => $row['id'],
                'category_id' => $row['category_id'],
                'name' => $row['name']
            );
        }

        $sql2 = "SELECT * FROM category";
        $s2 = $db->prepare($sql2);
        $s2->execute();

        while($row  = $s2->fetch(PDO::FETCH_ASSOC)){
            $categories[] = array(
                'id' => $row['id'],
                'name' => $row['name'],
            );
        }   
    } 
    catch (PDOException $e) {
        $errMsg = "Error fetching data" . $e->getMessage();
        include 'error.html.php';
        exit();
    }

    include 'buy-a-biz.php';
    exit();

}

1 个答案:

答案 0 :(得分:1)

您正在将done回调传递给$.ajax。您应该将此回调命名为success

$.ajax({
    type: 'GET',
    url: 'index.php',
    data: { business_category_id: category_id },
    success: function(category_id){
            $("#result").html(category_id + ' submitted successfully!');
        }
    });

或对done返回的承诺调用$.ajax

$.ajax({
    type: 'GET',
    url: 'index.php',
    data: { business_category_id: category_id },
}).done(function(category_id) { 
    $("#result").html(category_id + ' submitted successfully!'); 
});