【问题标题】:Passing data using jQuery AJAX to PHP script使用 jQuery AJAX 将数据传递给 PHP 脚本
【发布时间】:2016-05-08 12:56:38
【问题描述】:

HTML、AJAX 和 PHP 包括在下面。在介绍 AJAX 之前,一切功能(表单标签和 PHP 处理值从下面的 HTML 中删除)。

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

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

Firebug 还显示它通过并且 URL 是正确的(index.php?business_category_id=ajax-passed 值)。如果正在传递 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();

}

【问题讨论】:

标签: php jquery mysql ajax


【解决方案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!');
        }
    });

或者在$.ajax返回的promise上调用done

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

【讨论】:

  • 感谢您的回复。使用成功并不能让它发挥作用。我尝试了成功并完成并了解到我的消息只有在我使用成功时才会显示。我的 php 脚本 @index.php 仍然没有收到数据。
  • 我编辑了上面的代码以反映使用成功。如所写,此代码会产生错误。如果删除了 category_id 参数,它会显示消息 -- function() ... 而不是 function(category_id)....
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-09
  • 1970-01-01
  • 2016-12-14
  • 2018-10-03
  • 2013-06-18
  • 2012-08-19
相关资源
最近更新 更多