【发布时间】:2013-01-03 21:14:18
【问题描述】:
我正在使用 ajax 调用基于 WCF REST 的服务。
在页面加载之前调用 ajax 方法。 我希望在 ajax 请求的标头中发送一个“令牌”。在提琴手中,这就是我所看到的:
1.)对服务的请求,标头中没有令牌。(AJAX 调用失败) 2.)向标头中带有令牌的同一服务的请求。(AJAX 调用通过)
之后,在 chrome 和 safari 上一切正常。但是在 IE 10 和 Mozilla 上只有一个服务调用。因此,IE 10 和 Mozilla 中的服务调用失败,因为请求的标头中没有令牌。
这是我调用的方法:
function callservice (method, serviceUrl, params, successHandler, errorHandler) {
$.ajax({
crossDomain: true,
type: method,
url: serviceUrl,
beforeSend: function (XMLHttpRequest) { XMLHttpRequest.setRequestHeader("Authorization", Token); },
contentType: "application/json; charset=utf-8",
dataType: "json",
success: successHandler,
error: errorHandler
});
function photos(data) {
alert(data);
console.log(data);
};
}
我同时控制 Web 服务和应用程序(调用此 Web 服务)。当应用程序和 Web 服务都托管在本地主机上时,不会出现此问题。在这种情况下,只有一个成功的服务调用。但是有跨域调用的时候有两个AJAX调用。
我的问题是为什么 AJAX 请求没有在第一次尝试时发送令牌? 为什么令牌只在第二个 AJAX 调用中发送?
我们将不胜感激任何形式的帮助。
【问题讨论】:
-
你从哪里调用这个函数?
-
service call fails in IE 10 and Safari应该是IE 10 and Mozilla对吧? -
我在文档加载前调用函数:$(document).ready(function () { });
-
你最后的评论是矛盾的。
-
我的猜测是你有逻辑来连接一个动态调用的事件处理程序(例如,当一个元素被创建时)。事件处理程序连接到与您的选择器匹配的所有内容,即使处理程序已经分配给选定的元素。因此,您将多次触发相同的事件。只是一个理论,直到你展示你如何打电话给
callservice。
标签: javascript jquery ajax