Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用ajax和javascript覆盖HTML对象_Javascript_Python_Html_Ajax - Fatal编程技术网

用ajax和javascript覆盖HTML对象

用ajax和javascript覆盖HTML对象,javascript,python,html,ajax,Javascript,Python,Html,Ajax,我正在处理金字塔中的MySQL数据,需要根据JS ajax调用的结果更改HTML if语句 我的主页从views.py接收数据,并将其传递到.mak脚本。这里重要的视图是主视图(它获得了基本的身份验证)和接收ajax帖子的视图。 此时,主视图返回指向一周前的数据对象(oData)和datetime对象(history\u week) 视图。py: #This view queries for data that I will use in the mak file @view_config(r

我正在处理金字塔中的MySQL数据,需要根据JS ajax调用的结果更改HTML if语句

我的主页从
views.py
接收数据,并将其传递到
.mak
脚本。这里重要的视图是主视图(它获得了基本的身份验证)和接收ajax帖子的视图。
此时,主视图返回指向一周前的数据对象(
oData
)和
datetime
对象(
history\u week

视图。py:

#This view queries for data that I will use in the mak file

@view_config(route_name='monitor', 
        renderer='monitor:templates/monitor.mak', 
        permission='edit'
        )
def monitor(self):
    import datetime
    request = self.request

    oData = DBSession.query(Alert).order_by(Alert.time)

    history_week = datetime.datetime.now() - datetime.timedelta(days=7)

    return {
        'oData' : oData,
        'logged_in' : request.authenticated_userid,
        'history_week' : history_week,
        }
...
...
#this is the view for my js ajax call

@view_config(route_name="history_ajax",renderer="json")
def history_ajax(self):

    import datetime, json

    iDays = self.request.POST.get('days')

    history_days_ajax = datetime.datetime.now() - datetime.timedelta(days=iDays)

    #because datetime.datetime is not serializable
    from json import JSONEncoder
    class DateEncoder(JSONEncoder):
        def default(self, obj):
            if isinstance(obj, datetime.date):
                return obj.isoformat()
            return JSONEncoder.default(self, obj)


    return {
        'history_days_ajax' : json.dumps(history_days_ajax, cls=DateEncoder),
        }
% for oAlert in oData[::-1]:
    % if oAlert.time >= history_week:
        <table id="Alerts">
        ...
$(document).ready(function(){
    $('#day').click(function(event){
        $.ajax({
            type: "POST",
            url: "history",
            dataType: "json",
            data: {
                'days': 1,
            },
            async: false,
            success: function(data) {
                history = data.history;
            }, 
        });
我使用这些数据来绘制数据表,但我只想在一定的时间范围内绘制它们。目前,所有小于一周的数据表都会被打印出来

HTML:

#This view queries for data that I will use in the mak file

@view_config(route_name='monitor', 
        renderer='monitor:templates/monitor.mak', 
        permission='edit'
        )
def monitor(self):
    import datetime
    request = self.request

    oData = DBSession.query(Alert).order_by(Alert.time)

    history_week = datetime.datetime.now() - datetime.timedelta(days=7)

    return {
        'oData' : oData,
        'logged_in' : request.authenticated_userid,
        'history_week' : history_week,
        }
...
...
#this is the view for my js ajax call

@view_config(route_name="history_ajax",renderer="json")
def history_ajax(self):

    import datetime, json

    iDays = self.request.POST.get('days')

    history_days_ajax = datetime.datetime.now() - datetime.timedelta(days=iDays)

    #because datetime.datetime is not serializable
    from json import JSONEncoder
    class DateEncoder(JSONEncoder):
        def default(self, obj):
            if isinstance(obj, datetime.date):
                return obj.isoformat()
            return JSONEncoder.default(self, obj)


    return {
        'history_days_ajax' : json.dumps(history_days_ajax, cls=DateEncoder),
        }
% for oAlert in oData[::-1]:
    % if oAlert.time >= history_week:
        <table id="Alerts">
        ...
$(document).ready(function(){
    $('#day').click(function(event){
        $.ajax({
            type: "POST",
            url: "history",
            dataType: "json",
            data: {
                'days': 1,
            },
            async: false,
            success: function(data) {
                history = data.history;
            }, 
        });
以下是我的问题:

1) 如何根据javascript的ajax调用更改我的
if
语句?或者,有没有更好的方法在不使事情复杂化的情况下做到这一点?
2) 我需要替换if语句中的datetime对象,因为首先页面需要加载一些内容,其次我希望默认值为1天。理想情况下,这应该是解决方案的一部分


我希望我把一切都说清楚了。这是一个相当长的问题。

我最终在没有ajax和一些重组的情况下完成了这项工作:

我现在没有定义静态路由,而是:

config.add_route(dRoute['monitor'], dRoute['/monitor/{duration}'])
我没有在HTML中进行过滤,而是通过DBSession在我的views.py中进行过滤。在这里,我检查我的url,并相应地用python进行计算,这使一切变得更加简单:

@view_config(route_name='monitor', 
        renderer='monitor:templates/monitor.mak', 
        permission='edit'
        )
def monitor(self):
    import datetime
    request = self.request

    sDuration = request.matchdict['duration']

    if sDuration == 'Day':
        oDateThreshold = datetime.datetime.now() - datetime.timedelta(days=1)
    elif sDuration == 'Week':
        oDateThreshold = datetime.datetime.now() - datetime.timedelta(days=7)
    etc...


    oData = DBSession.query(Alert).order_by(Alert.time).filter(Alert.time>=oDateThreshold)


    return {
        'oData' : oData,
        'logged_in' : request.authenticated_userid,
        'history_week' : history_week,
        'sDuration' : sDuration,
        }
最后,按下按钮时,我会像这样更改HTML中的路径:

<a id="week" href="${request.route_url('monitor',duration='Week')}">
    1 Week
</a>

这让我摆脱了ajax

换句话说,事情就是这样:
当我单击我的按钮时,href将当前页面的路径(
monitor
)更改为
monitor/'duration'
)。然后,我的视图读取新的url并根据它进行计算。然后,返回的数据将在我的.mak文件中使用,而不会使那里的事情复杂化