gpt4 book ai didi

javascript - 两个不同的ajax url返回相同的数据

转载 作者:行者123 更新时间:2023-11-28 05:37:18 25 4
gpt4 key购买 nike

我在我的 django 站点上使用 jQuery ajax 调用来填充选择框中的选项,该选项出现在向用户弹出(引导)的模式窗口中。具体来说,它提供特定数据库中可用模式的列表。 ajax url 是动态的,这意味着它在 URL 中包含 db_host 和 db_name。我有一个带有客户端的站点,每个客户端都必须指向不同的主机/数据库。

通过 URL 传递的 db_host 和 db_name 在 django View 中用于在相关主机/db 上执行必要的 sql 语句。

因此,每个 db_host/db_name 组合的 URL 应该是唯一的。

我在客户端 A 的页面上遇到问题,我单击按钮以显示模式。 ajax 调用已完成。我得到了我期望的数据。一切安好。假设 ajax URL 是“/ajax/db_host/server_a/db_name/client_a_db/schema_dropdown”。

现在,我到达客户端 B 的页面并单击相同的按钮来显示模式。 ajax 调用已完成。假设这次 ajax URL 是“/ajax/db_host/server_b/db_name/client_b_db/schema_dropdown。”

但是,返回的数据实际上是我之前进行的ajax调用(“/ajax/db_host/server_a/db_name/client_a_db/schema_dropdown”)返回的数据,而不是URL(特别是host/db)我刚刚通过了。

我已经两次/三次检查我的 URL 实际上每次都是不同的。任何帮助,将不胜感激。

这是我的 javascript 函数,它在显示填充我的选择的模式之前被调用。

function populate_schema_dropdown(db_host, db_name) {

var ajax_url = "/ajax/db_host/" + db_host + "/db_name/" + db_name + "/schema_dropdown"

$.ajax({
url: ajax_url,
success: function (data) {
$("#select-element").empty()
$.each(data, function (i, v) {
$("#schema-element").append("<option value='" + v[0] + "'>" + v[1] + "</option>")
})

}
});
};

下面是我的 django View 。

def ajax_schema_dropdown(request, db_host, db_name):

cursor = get_temporary_db_connection(db_host, db_name).cursor()

cursor.execute("""
SELECT
NAME
FROM [sys].[schemas]
""")
data = [(each[0], each[0]) for each in cursor.fetchall()]
cursor.close()
return HttpResponse(json.dumps(data), content_type="application/json")

下面是 get_temporary_db_connection 函数...

def get_temporary_db_connection(db_host, db_name):

temporary_name = str(uuid.uuid4)
connections.databases[temporary_name] = {
'ENGINE': 'sqlserver_ado',
'NAME': db_name,
'HOST': db_host,
'USER': '',
'PASSWORD': '',
'OPTIONS': {
'provider': 'SQLNCLI11'
}
}

return connections[temporary_name]

最佳答案

可能是设置temporary_name变量的方式有问题。它不像它想象的那样是动态的(我猜),与第一个数据库用于所有正在进行的 ajax 调用相同的数据库,要修复它,您必须替换行:

temporary_name  = str(uuid.uuid4)

temporary_name  = str(uuid.uuid4()) # note i've changed uuid.uuid4 -> uuid.uuid4()
________________________________^^____

注意:在使用数据库后关闭与数据库的连接可能是有意义的,否则您最终会在 connections 字典中得到大量连接。作为一个选项,您可以在创建连接字典后保持与数据库的连接并重新连接(如果发生某些情况),或者简单地返回现有连接而不执行新连接。

关于javascript - 两个不同的ajax url返回相同的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39251588/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com