AJax技术

limodou是一个程序员,他关心的焦点是Python, DocBook, Open So

字号+ 作者:H5之家 来源:H5之家 2017-05-25 18:06 我要评论( )

SharePlat中,我已经基本完成了基本Form的ajax方式的上传和上传后的处理。但带文件的怎么办。经过上网查找,终于找到一些示例,特别是有一些是jQuery的示例,完成了简单的ajax方式的文件上传处理。目前它不支持多文件上传。那么主要的实现方式就是使用iframe

SharePlat中,我已经基本完成了基本Form的ajax方式的上传和上传后的处理。但带文件的怎么办。经过上网查找,终于找到一些示例,特别是有一些是jQuery的示例,完成了简单的ajax方式的文件上传处理。目前它不支持多文件上传。那么主要的实现方式就是使用iframe。

一个iframe可以象正常的页面一样来工具。关于它的详细解释和例子可以看这个文档。使用iframe上传文件其基本思路是:

对于有文件上传的form,设置它的target为iframe的名字。那么你需要定义iframe为:

<iframe name="framename" id="framename" width="1" height="1" marginwidth="0" marginheight="0" scrolling="no" frameborder="0"></iframe>

这样,当你提交form时,输出结果是放到target属性所指的iframe中去了。从上面的iframe代码可以看出,我们将它的大小设置到最小,这样用户就看不到。所以就实现了隐藏提交了。

那么还有问题就是如何实现上传后的反馈效果。这就需要在后台输出一个script片段。这样当返回时,浏览器会去执行它。从而实现ajax的效果。这个片段如:

<script type="text/javascript">
  window.parent.ajax_iframe_response();
</script>

window表示iframe,它的parent就是调用它的页面。ajax_iframe_response是调用页面中的一个js函数。从这里我们知道,实现一个ajax的文件上传form的处理需要前后台配合,特别是后台返回的js代码要与调用页面相关联。这里的关联就是默认一个js函数名。那么如何处理返回的交互数据呢?我们可以向这个js代码中传入一个参数,这个参数就是一个json格式的字符串。然后在调用页面的相应的js函数中象一般的ajax回调函数一样,通过eval来处理这个json字符串,然后进行处理。因此在后台我们所做的工作就是如何生成js代码片段,这个js代码片段需要调用一个约定的js函数,同时传入一个json格式的字符串,以便让约定的js函数进行处理。

那么页面中的js要做的工作就是:准备iframe, 修改form的target属性,指向iframe,准备一个约定js函数,用来处理返回的结果。

在SharePlat中已经存在一个ajax_form.js的js文件,它实现了非文本上传的form的ajax的交互。它提供了一个AjaxForm的对象,它可以对返回结果进行处理,比如正确时提示信息或跳转,错误时提示信息或跳转。如果错误信息是针对字段的,还可以在相应的字段下插入出错信息。同时还可以挂接几个自定义事件,用来进行用户自定义的处理。因此它的处理功能已经很完善了。为了重用它的部分功能,我按照AjaxForm的样式生成了一个AjaxIFrame的类,重用了AjaxForm的结果处理。这样你使用AjaxIFrame时与AjaxForm是一样的。那么AjaxIFrame主要完成了:自动修改form对象的target属性,自动创建iframe元素(如果不存在的话),自动将数据处理绑定为约定的js函数。因此通过简单的调用:

var ajax_iframe = new AjaxIFrame(‘#upload_form’)

你就完成了对普通form(id为"upload_form")的ajax封装。

在后台decorator中提供了一个生成返回script的函数。这样你的view只要返回一个json格式的数据,它自动会套用一个script的模板来调用约定的js函数。详细定义为:

def ajax_iframe_response(func):
    """
    """
    def _f(*args, **kwargs):
        a = ”’<script type="text/javascript">
  window.parent.ajax_iframe_response(%r);
</script>”’
        return HttpResponse(a % Ajax.json(func(*args, **kwargs)))
    return _f

因此你可以看到。当你的view返回一个数据时,先使用ajax(在utils目录下)模块的json函数将结果转为json格式,然后与模板合成,再使用HttpResponse来执行。这样当这段js代码返回给前端时,就会自动调用预定义好的处理函数对json数据进行处理,从而实现ajax效果。

具体的代码在SharePlat可以找到。一个示例就是个人管理中的文档上传可以实现这样的效果。其它的地方在发本文时还未做修改。


 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • WordPress首页Ajax翻页

    WordPress首页Ajax翻页

    2017-03-11 14:05

  • WordPress Ajax评论插件:Ajax Edit Comments

    WordPress Ajax评论插件:Ajax Edit Comments

    2017-03-04 08:04

  • WordPress中利用AJAX异步获取评论用户头像的方法

    WordPress中利用AJAX异步获取评论用户头像的方法

    2016-01-15 14:13

  • WordPress中利用AJAX技术进行评论提交的实现示例_javascript技巧

    WordPress中利用AJAX技术进行评论提交的实现示例_javascript技巧

    2016-01-15 13:07

网友点评
p