【问题标题】:Proper way of doing AJAX request to retrieve data from database执行 AJAX 请求以从数据库中检索数据的正确方法
【发布时间】:2017-02-20 13:25:52
【问题描述】:

我有一个数据库,里面有一张表。
表有 Company 和 Time 列,还有更多,但这两个很重要。
所以用户通过填写​​表格进行预约。
在表格中我有 2 <select>s - 公司和时间,所以他从选项中选择了这两个。
他单击一个按钮,表格就存储在数据库中。
如何使用 AJAX 检索所有正在使用的小时(时间),然后相应地禁用它们。
例如:我从公司中选择了诺基亚,从时间下拉列表中选择了 9:30。现在您想与诺基亚预约,但 9:30 时间已被禁用,因为它已被使用。
为此使用 AJAX 的正确方法是什么:
这是我的结构

 function MakeApp() {

        var AppWith = $("#CompanySelect").val();
        var AppTime = $("#TimeSelect").val();
        var Yritys = $("#YritysNtext").val();
        var Henkilonimi = $("#HenkilonimiText").val();
        var Asema = $("#AsemaText").val();
        var PuhelinNR = $("#PuhelinText").val();
        var EMail = $("#EMailText").val();
        var Keskustelun = $("#KeskustelunText").val();
        var app = { AppWithYritys: AppWith, AppTime: AppTime, YritysN: Yritys, Henkilonimi: Henkilonimi, Asema: Asema, PuhelinNR: PuhelinNR, EMail: EMail, Keskustelun: Keskustelun }

        var request = $.ajax({
            type: "POST",
            data: JSON.stringify(app),
            url: "/api/Appointments",
            contentType: "application/json",
            dataType: "html"
        });
        request.done(function (podaci) {
            if (podaci != -1) {
                alert("You Have successfully made an appointment");
                location.assign("BookAppointment.html");
            }
            else {
                $("#p1").html("Greska pri unosu");
            }
        });

        request.fail(function (gr) {
            $("#p1").html(gr.statusText);
        });
    };

【问题讨论】:

  • AJAX 与从数据库中检索数据没有任何关系。这一切都发生在/api/Appointments 背后。这里发生的实际问题在哪里?
  • 我猜你没听懂我的问题。我正在尝试获取所有正在使用的时间,具体取决于所选的公司,然后将其禁用。或者你明白了吗?我不能为此使用 Ajax 吗?那我怎么能通过控制器来做呢? @大卫
  • 似乎更有可能不理解您的问题。当前没有在您的代码中起作用?您正在尝试什么具体的技术操作,它如何没有按预期工作?对于高层次的业务需求,我们真的无能为力,因此“所有正在使用的时间”或“选择的公司”之类的术语在这里毫无意义。但如果您有特定的技术问题,我们可以提供帮助。
  • 这不是业务需求,实际上是一个实践项目,有3个公司和3个小时。代码正在工作我只是不知道我必须添加什么,以便应用程序可以“获取所有时间(从 9:00、9:30、10:00 的巨大列表中)”然后禁用那些正在使用中?有可能吗?
  • 同样,您的业务需求(无论它们是否来自实际的“业务”并不重要)对技术没有任何意义。专注于具体的技术问题。你从哪里得到这些数据?数据是什么样的?您对数据执行什么操作?仅仅向我们提出要求并期望我们为您编写代码不会让您走得太远。至于“是否可能”,是的,可以从数据库中检索数据并根据该数据执行逻辑。但在你的问题中没有任何内容。

标签: javascript c# jquery html ajax


【解决方案1】:

实际上,管理数据和数据库是您的服务器工作。 AJAX 只是一种将信息异步发送到服务器的方法。你可以做的是,当你加载页面时,你只用 AJAX 检索占用的时间,你在你的选择中禁用它们的选项,并且每当你的服务器收到请求时,它会检查公司和时间是否有可用的地方.

很抱歉,我没有您的代码,因为我认为它很清楚。如果不是,请随时发表评论,我会尽力帮助您。

编辑

这里我有几行代码,它不完整,因为我们缺少一些信息,但它是主要的算法。

你的服务器:

{GET}
public void getUnavailable() {
    //get all times from Databases for today's date., 
    //Encode them in JSON.
    //returns the times.
}

假设您的 JSON 如下所示:

[
{
    "company": "Nokia",
    "times": [
        "9:30",
        "10:00",
        "10:30"
    ]
}
]

您需要检索您的 JSON 并对其进行解析以禁用所选 select 中的时间:

$(document).ready(function(){
$.ajax({
    'url': API_URL + 'event/getUnavailable',
    'method': 'GET',
    'success': function(data) {
        $.each(data.data, function($index, $company){
            var select = /* .. Get the Select of the current company .. */
            $.each($company.times, function($index, $times){
                select./*.. Find the time associate with $time .. */.setDisable(true); // I don't know if setDisable is the correct function, you might want to check this out.
            })
        })
    },
    'error': function(error) {
        console.error(error.data);
    }
});

$('.myForm').submit(function(){
    // This is where you submit your data to your server.
    $.ajax({
        'url': API_URL + "event/create",
        'method': 'POST',
        'data': /* your data */,
        'success': function(){
            console.log('success');
        },
        'error': function(error) {
            console.error(error);
        }
    })
});
})

这是我能用我所拥有的信息做的最多的事情。

【讨论】:

  • 理论上我明白你在说什么,但是我的实践很糟糕,我还在努力学习,这就是实践。如果您不想打扰代码,您可以推荐一些有用的教程?
  • 我没有教程,但我会尽力为您提供一些您可以理解的代码。给我几分钟。
  • 这可能会有所帮助,只有这个 JSON 部分,我不太明白,这是我填写
  • 并且在 getUnavailable() 中我应该创建一个列表并用数据库中已经存在的时间填充它吗?然后返回列表?
  • 没关系,别担心,编程不是一个简单的领域,但你会看到它很有趣!
【解决方案2】:

处理这个问题的真正方法是,无论您在 /api/Appointments 后面使用什么 Web 技术,都可以返回任何可用的约会。你的变量名对我来说没有多大意义,所以试着理解下面的代码是做什么的。

$.get( "/api/Appointments", JSON.stringify(app) )
  .done(function( data ) {
    //note that the "data" variable holds your returned appointments
    //I would return a json document of available appointment times to filter your select


    //sample json would look something like this
    // { "availableAppointments": ["9:30 AM", "10:00 AM"] }


    // and then iterate through available appointments and populate your select
    for(var i = 0; i < data.availableAppointments.length; i++){
         $('#yourSelectId').append($('<option>', {
           value: 930,
           text: data.availableAppointments[i]
         }));
    }

  });

请注意此代码在语法上可能不正确。

这里有一些链接可以帮助我为你解答这个问题,以防万一。

Adding options to a <select> using jQuery?

https://api.jquery.com/jquery.get/

【讨论】:

    猜你喜欢
    • 2019-06-26
    • 2019-04-04
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-17
    相关资源
    最近更新 更多