首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >jQuery:处理混合html/js响应

jQuery:处理混合html/js响应
EN

Stack Overflow用户
提问于 2012-06-12 10:20:23
回答 1查看 1.1K关注 0票数 1

在混合的html/js ajax响应中访问javascript代码有困难。jQuery ajax文档声明:

如果指定了html,则在将

作为字符串返回之前执行检索到的数据中的任何嵌入JavaScript。

我可以通过在html回复中添加一个简单的片段来确认:

代码语言:javascript
运行
复制
<script type="text/javascript"> alert($(this)); </script>

那么,如何保留对js代码的访问与一次性执行呢??尝试实现模式登录(以防止表单提交屏幕中会话超时时的数据丢失)。当然,我需要能够访问ajax的js代码,然后在远程服务器上验证电子邮件/密码字段和ajax身份验证用户凭据。

下面是模式登录coffeescript片段:

代码语言:javascript
运行
复制
# submit form
$.ajax
  success: (data) -> ...
  error: (data) ->
    popAuth(data.responseText) if(data.status == 401)

popAuth = (title) -> 
  $.fancybox({
    href: "/login"
    ajax: { type: "GET" }
    title: title
  })

也许我可以向popAuth() ajax选项添加一个成功的回调,以存储返回的js代码?jQuery“实时”处理程序如何?不幸的是,这种情况并不像人们所希望的那样直接;-)我将$.getScript视为一种选择,但我不希望将html与js分开,因为服务器端已经组装了html + js,而最初的ajax调用一次就把它全部删除了。(即避免创建专用服务器端控制器来发送js文件内容包)

当然,我对解决这一问题的其他解决办法持开放态度。例如,我可以将登录字段和js登录验证代码存储在隐藏的div中的每个屏幕(位于WordPress前端后面的JVM应用程序,这样每个屏幕基本上都是必需的),然后在“本地”弹出模式登录窗口,我认为这将绕过远程ajax内容的恼人的一次性js执行。

不管怎么说,想法很受欢迎!客户端都是非常简单的and...horribly复合体;)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-12 12:09:43

好吧,抵挡真正的回应洪流,我会刺自己一刀。

正如我现在所理解的,由于混合html/js内容是一次性执行的,所以我们有一次机会捕获ajax响应js代码并将其绑定到当前范围。

首先,在最初的ajax调用(即返回可能的401未授权状态的表单submit )中,将模态登录的ajax设置的上下文设置为$(this),这是当前包含jquery验证和其他共享js代码的范围,这是模态登录ajax submit工作所需的。

在我的例子中,使用fancybox添加上下文param,现在如下所示:

代码语言:javascript
运行
复制
popAuth = (title) -> 
  $.fancybox({
    href: "/login"
    ajax: { type: "GET" }
    context: $(@)
    title: title
  })

然后,由于父窗口包含大多数所需的javascript,惟一的要求是创建一个js文件,该文件将模式登录表单按钮单击事件绑定到验证和$.ajax提交。

代码语言:javascript
运行
复制
# login.coffee
jQuery ->
  $('#loginSubmit').click (e) ->
    e.preventDefault()
    isValid = $('#loginForm').validate().form()
    if isValid
      $('#spinner').show()
      $.ajax
        data: $('#loginForm').serialize()
        success: (data) ->
          $('#status').fadeOut()
          location.href = '/foo'
        error: (data) ->
          $('#status > div').html( data.responseText )
          $('#status').fadeIn()
        complete: () ->
          $('#spinner').hide()

已完成,一切顺利;-)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10994662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档