我正在开发一个支持Ajax的页面,我需要在不刷新页面的情况下下载文件.为此,我在页面上添加了一个隐藏的iframe.
<iframe id="iframeDownload" style="display:none"></iframe>
Run Code Online (Sandbox Code Playgroud)
当我需要下载文件时,我使用这样的脚本:
$("#iframeDownload").attr("src","url to server");
Run Code Online (Sandbox Code Playgroud)
在服务器端,我需要实现一些逻辑,它可能返回一些不同的http状态代码来指示服务器端的问题.如果文件下载成功,那就没关系.但是如果服务器端出现问题,我需要捕获这些http代码.
$("#iframeDownload").load(function(e){
// get http status code and act accordingly but I cannot get it
});
Run Code Online (Sandbox Code Playgroud)
谢谢你的回复.
更新: 在我看来,当我们通过iframe下载时,浏览器将处理发送请求和接收响应,并仅将响应主体传递给iframe.因此,javascript无法读取响应头.这种情况类似于加载页面.如果我错了,请纠正我.
在路由更改时,我需要中止来自先前路由的所有待处理请求,以便我不会遇到先前路由的响应问题,从而弄乱我当前路由上的数据(有时候,当前一路由的响应需要很长时间才能完成时) .
我曾考虑过使用http拦截器:
$httpProvider.interceptors.push(function($q) {
return {
'request': function(config) {
},
'response': function(response) {
}
};
});
Run Code Online (Sandbox Code Playgroud)
在请求函数中,我可以config.timeout使用此处建议的promise 修改它,并将所有延迟对象存储在全局缓存中,以便我可以取消所有这些.
这种方法的问题在于它可能会覆盖 config.timeout代码中其他位置的set.
我认为另一种解决方案可能是取消所有XMLHttpRequest级别的ajax请求,但我不知道该怎么做.
有什么建议?谢谢.
我想在JavaScript中模拟C#的事件:我想要做的是这样的事情:
假设我有以下代码:
function addToInvocationList(method, listener) {
*Some code to add listener to the invocation list of method*
}
function MyClass() {
}
MyClass.prototype.Event = function() {}
var my_class_obj = new MyClass();
function subscriberFunction1() {}
function subscriberFunction2() {}
function subscriberFunction3() {}
addToInvocationList(my_class_obj.Event, subscriberFunction1);
addToInvocationList(my_class_obj.Event, subscriberFunction2);
addToInvocationList(my_class_obj.Event, subscriberFunction3);
my_class_obj.Event();
Run Code Online (Sandbox Code Playgroud)
我想要做的是当我调用my_class_obj.Event时,所有订阅的函数都被调用.
这可以纯粹用JavaScript实现,还是需要通过DOM事件找到方法?
当我将用户作为查询字符串传递(使用$ http中的参数)并设置web api方法以在uri中查找它们时,一切都很好.但是当我按照下面的方式传递它们时,用户显示为null.我在这里失踪了什么?
角度函数
scope.saveChanges = function () {
// create array of user id's
var users = [];
angular.forEach(scope.usersInRole, function (v, k) {
users.push(v.Key);
});
var data = { user: users };
var token = angular.element("input[name='__RequestVerificationToken']").val();
// put changes on server
http({
url: config.root + 'api/Roles/' + scope.selectedRole + '/Users',
method: 'PUT',
data: data,
contentType: "application/json; charset=utf-8",
headers: { "X-XSRF-Token": token },
xsrfCookieName: '__RequestVerificationToken'
}).success(function (result) {
// notify user changes were saved
angular.element('#myModal').reveal({ closeOnBackgroundClick: false });
});
}; …Run Code Online (Sandbox Code Playgroud) 我正在使用asp.net web api和基于令牌的身份验证.我的令牌选项将成功令牌过期时间设置为14天后.
OAuthOptions = new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new PathString("/Token"),
Provider = new SimpleAuthorizationServerProvider(),
AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
// In production mode set AllowInsecureHttp = false
AllowInsecureHttp = true
};
Run Code Online (Sandbox Code Playgroud)
我生成的令牌是这样的.
{
"access_token": "Mg5oQAzt9RLSUezxPYNQ7JRcJqo-uPxfOgOGHKkrJ_q56g0H8x-sjKm1mkjND0VAK3H22nwFlGNk5wfTocCb5mKMvTYwsZAv5sh0SACHdbb_9BGftMuqbFdm6wH0wXF-Sq3noF7hc2FeUUauhDfrBq5jTSou4NO3EBwjc0jj3v-yQzPGMCFxq2Q8C9uhat14rGYteYqj5mX3L5JtwHrobePL2R9lcnagNIMa44GUWQ8DVR2urP4KCrDHJf1G5pIfv94uB85I7sbf0nse7VvhYp058I8voNR9_zD1XC5-AODQJ16F484zxQokX1BWJ3gfgd86zJr2O9iKsA",
"token_type": "bearer",
"expires_in": 1209599,
".issued": "Sat, 20 Feb 2016 13:15:10 GMT",
".expires": "Sat, 05 Mar 2016 13:15:10 GMT"
}
Run Code Online (Sandbox Code Playgroud)
我将此信息保存在cookie中并在我的应用程序中使用.但几分钟后我的访问令牌验证即将到期,401 http错误.
我试图从Fiddler和邮差获取请求,但给出了401授权错误.
正如您在Angularjs常见问题解答中所读到的那样,$rootScope不鼓励使用.因此,服务更适合存储稍后将在控制器之间共享的数据.但是我无法在ng-show不使用的情况下使指令工作$rootScope.
这就是我正在做的事情;
的index.html
<div ng-controller="GlobalCtrl">
<div ng-show="showSettings"></div>
<aside ng-show="showSettings" >
<h1>Some text</h1>
<button ng-click="closeSettings()">Ok</button>
</aside>
</div>
Run Code Online (Sandbox Code Playgroud)
app.js (我正在开发应用程序,因为我正在开发cordova ..代码被截断)
var app = angular.module('tibibt', ['tibibt.controllers', 'tibibt.filters', 'tibibt.services']);
angular.element(document).ready(function () {
angular.bootstrap(document, ['tibibt']);
});
Run Code Online (Sandbox Code Playgroud)
services.js
/* Create an application module that holds all services */
var tibibtServicess = angular.module('tibibt.services', []);
/* Global service */
tibibtServicess.service('globalService', function () {
this.Data = {
showSettings: 'false'
};
this.getAll = function () {
return this.Data;
}; …Run Code Online (Sandbox Code Playgroud) 我有以下代码:
app.directive('ngUp', function () {
return function (scope, element, attrs) {
element.bind("keyup", function (event) {
if(event.which === 40) {
console.log('down')
}
else if (event.which === 38) {
console.log('up');
}
else {
console.log('some other');
}
});
};
});
Run Code Online (Sandbox Code Playgroud)
我有:
<div class="scrollbar" id="ex3">
<div>
<ul>
<li ng-repeat="video in videos">
<a href="#" ng-click="select($index)" style="font-size: 100%">
{{video.name | subStringFilter : 20}}
</a>
</li>
</ul>
</div>
Run Code Online (Sandbox Code Playgroud)
如果我把ng-up放在li元素或锚元素上,我将指令中的元素作为a.ng-binding.
我不知道这是什么.
我想要的是能够使用我的向上和向下箭头键向上和向下滚动列表(并在滚动时将类应用于突出显示的列表元素).
我期待元素可以是li元素或锚元素,但是我得到了a.ng-binding,它在向上或向下按键时不会触发.
我是Css的新手,很难在互联网上搜索这个特定的案例,所以我在这里发一个问题.
我正在研究现有的代码库,我看到了类似的东西.
li {
background-color: #000 \9;
background-color: rgba(0, 0, 0, 0);
}
Run Code Online (Sandbox Code Playgroud)
我不明白的意思\9.但它看起来规则是重复的,我应该删除其中一个.
你能解释一下\9吗?我应该删除一条规则吗?谢谢.
我问的原因是因为我正在将一些css文件转换为更少的文件并\9导致编译问题.
我有以下几点:
Web.config
<system.web>
<authentication mode="None" />
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
<customErrors mode="On" defaultRedirect="~/Error/ShowError">
<error redirect="~/Error/ShowError/400" statusCode="400" />
<error redirect="~/Error/ShowError/401" statusCode="401" />
<error redirect="~/Error/ShowError/403" statusCode="403" />
<error redirect="~/Error/ShowError/404" statusCode="404" />
</customErrors>
</system.web>
Run Code Online (Sandbox Code Playgroud)
ErrorController
[AllowAnonymous]
public class ErrorController : Controller
{
public ViewResult ShowError(int id)
{
Response.StatusCode = id;
switch (id)
{
case 400:
return View("~/Views/Error/400.cshtml");
case 401:
return View("~/Views/Error/401.cshtml");
case 403:
return View("~/Views/Error/403.cshtml");
case 404:
return View("~/Views/Error/404.cshtml");
default:
return View("~/Views/Error/404.cshtml");
}
}
}
Run Code Online (Sandbox Code Playgroud)
FilterConfig
public static void RegisterGlobalFilters(GlobalFilterCollection …Run Code Online (Sandbox Code Playgroud) 我知道只要它们是同一父域的子域,就可以允许其他域读取我们的域cookie .
例如,intranet.abc.com并且extranet.abc.com可以通过指定域属性来允许彼此读取cookie.abc.com
现在,我真的需要我可以允许其他域读取我的域cookie(它们不是同一域的子域).我在互联网上搜索了很多讨论=> 由于安全问题,所有人都说"不" .我不确定我是否错过了那里的解决方案,因为在这种情况下我没有看到任何安全问题.我的服务器明确允许XYZ.COM域读取此cookie,因为cookie不包含任何敏感信息,而XYZ.COM域是我的可信域,
在我看来,应该有一种方法来指定允许在我们的域中读取特定cookie的其他域的列表,就像CORS一样,服务器可以决定信息是否应该可用于某些可信域.
如果没有使用解决方法,请告诉我是否可行,如果是,该怎么做?如果不可能,我真的想知道原因.
有关我正在实施的内容的一些信息:
我正在实现文件下载,在客户端我需要通过使用javascript中的间隔定期检查cookie中的下载令牌来检测下载是否完成.
我目前正在处理的当前系统的逻辑可能将文件存储在2个不同的服务器中.如果当前服务器中缺少该文件,它将在另一个服务器(另一个域)中下载文件
非常感谢你.
自解释小提琴:http://jsfiddle.net/5FG2n/6/
我需要根据其名称作为字符串动态选择要在运行时使用的控制器.该字符串将从配置对象中读取.
在下面的代码我目前已InnerCtrlAsLocalVariable分配给$scope.dynamicCtrl.我怎么分配InnerCtrlFromModule给财产?
视图:
<div ng-app='app' ng-controller='OuterCtrl'>
<div ng-controller='dynamicCtrl'>
{{message}}
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
JS:
var InnerCtrlAsLocalVariable = ['$scope',
function($scope) {
$scope.message = 'from controller as local variable - do not want'
}
];
angular.module('app', [])
.controller('OuterCtrl', ['$scope',
function($scope) {
// Instead of doing this...
$scope.dynamicCtrl = InnerCtrlAsLocalVariable;
// ...I want to do something like this:
// $scope.dynamicCtrl = resolveCtrl('InnerCtrlFromModule');
}
])
.controller('InnerCtrlFromModule', ['$scope',
function($scope) {
$scope.message = 'from controller defined in module …Run Code Online (Sandbox Code Playgroud) 我使用这样的环境事务:
using(TransactionScope tran = new TransactionScope()) {
CallAMethod1();//INSERT
CallAMethod2();//INSERT
tran.Complete();
}
Run Code Online (Sandbox Code Playgroud)
该方法CallAMethod2();返回affected rows =-264
所以它无法插入但是第一个Insert已经提交了!
我想知道如何使用ambient transaction以及如果第二种方法有多个需要内部事务的操作,如果我将这些操作放在内部事务中该怎么办?像这样 :
DAL_Helper.Begin_Transaction();
//------Fill newKeysDictioanry
affectedRow = DBUtilities.InsertEntityWithTrans("table2", newKeysDictioanry, DAL_Helper);
if (affectedRow == 1)
{
if (!string.IsNullOrEmpty(sp_confirm))
{
result_dt = UserTransactionDAL.Run_PostConfirm_SP(sp_PostConfirm, OBJ.ValuesKey, DAL_Helper);
if (result_dt.Rows.Count > 0 && result_dt.Rows[0][0].ToString() == "0")
{
DAL_Helper.current_trans.Commit();
if (DAL_Helper.connectionState == ConnectionState.Open)
{
DAL_Helper.Close_Connection();
}
return 1;// affectedRow;
}
else
{
DAL_Helper.current_trans.Rollback();
if (DAL_Helper.connectionState == ConnectionState.Open)
{
DAL_Helper.Close_Connection();
}
return -2;
}
}
//etc
Run Code Online (Sandbox Code Playgroud) angularjs ×5
c# ×5
javascript ×4
asp.net ×2
asp.net-mvc ×2
access-token ×1
cookies ×1
css ×1
http ×1
http-headers ×1
iframe ×1
informix ×1
jquery ×1
less ×1
oauth ×1
onload ×1
transactions ×1
web-config ×1