jQuery:处理混合的html/js ajax响应
jQuery: handling mixed html/js ajax response
混合 html/js ajax 响应中访问 javascript 代码时遇到问题。 jQuery ajax doc 指出:
如果指定了 html,则检索到的任何嵌入式 JavaScript 在 HTML 作为字符串返回之前执行数据
我可以通过在 html 回复中添加一个简单的片段来确认:
<script type="text/javascript"> alert($(this)); </script>
那么如何保留对 js 代码的访问权限与一次性执行?尝试实现模式登录(以防止在表单提交屏幕中的会话超时时丢失数据)。当然,我需要能够访问 ajax'd js 代码,然后验证电子邮件/密码字段,并验证远程服务器上的 ajax 身份验证用户凭据。
这是模式登录咖啡脚本片段:
# 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"live"处理程序怎么样?不幸的是,这种情况并不像人们希望的那样简单;-)我已经将$.getScript
视为一种选择,但宁愿不要将 html 与 js 分开,因为服务器端已经组装了 html + js,并且原始的 ajax 调用一次性将其全部拉下来。(即避免创建专用的服务器端控制器来发回 js 文件内容包)
我当然愿意接受解决此问题的替代解决方案。例如,我可以在每个屏幕上存储登录字段和 js 登录验证代码(JVM CRUD 应用程序位于 WordPress 前端后面,因此基本上每个屏幕都需要身份验证)在一个隐藏的div 中,然后"本地"弹出模式登录窗口,我认为这将绕过远程 ajax 内容烦人的一次性执行 js。
无论如何,想法赞赏! 客户端既非常简单又...非常复杂;-)
好吧,抵御名副其实的大量回应,我会自己试一试。
据我现在了解,由于混合的html/js内容是一次性执行的,因此我们有机会捕获ajax响应js代码并将其绑定到当前范围。
首先,在原始 ajax 调用(即返回潜在 401 未授权状态的表单提交)中,将模式登录的 ajax 设置的上下文设置为 $(this),这是当前正在执行的作用域,其中包含 jquery 验证和模式登录 ajax 提交工作所需的其他共享 js 代码。
就我而言,使用 fancybox,添加上下文参数,现在看起来像:
popAuth = (title) ->
$.fancybox({
href: "/login"
ajax: { type: "GET" }
context: $(@)
title: title
})
然后,由于父窗口包含大部分所需的 javascript,唯一的要求是创建一个 js 文件,将模式登录表单按钮单击事件绑定到验证和 $.ajax 提交。
# 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()
完成,一切都很好,有效;-)
- IE上的新XMLHttpRequest()出现JS Ajax未指定错误
- 含义模式:'中止'在JS Ajax请求中
- React JS Ajax Data Loop
- Angular.js ajax和应用程序不起作用
- JS(ajax)数组-带有HTML的输出和样式
- django-cant将选定的标签传递到js(ajax代码)
- 如何在JS/Ajax中每秒提取PHP函数
- JS/Ajax:抓取输入字段值,无需刷新或点击按钮
- JS/AJAX:提交时不刷新或按钮单击不触发输入
- 如何获取
- 元素 js/ajax 的 Id 值
- 如何使用 JS AJAX 获取 XML 标记的名称
- JS/Ajax w/ 带节流的按键
- jQuery:处理混合的html/js ajax响应
- 停止 js ajax 函数中的 html 提交按钮
- JS/AJAX:隐藏/显示选择框
- 哎呀js + $.ajax 将变量传递给父类
- 将带有 datatype:jsonp 的 jQuery ajax 更改为纯 JS ajax
- 提交后显示 JS/Ajax 消息
- Rails + JS + Ajax request
- jquery.couchdb.js Ajax 成功/错误未被调用