Jquery $.ajax通过它两次调用API';It’只有一次电话
我面临着一个奇怪的问题。我正在实施一个SPA。我正在使用MVC,Sammy router,这里需要JS和Knockout 这里是一个文件,我在其中定义了调用API的函数Jquery $.ajax通过它两次调用API';It’只有一次电话,jquery,ajax,asp.net-mvc,requirejs,sammy.js,Jquery,Ajax,Asp.net Mvc,Requirejs,Sammy.js,我面临着一个奇怪的问题。我正在实施一个SPA。我正在使用MVC,Sammy router,这里需要JS和Knockout 这里是一个文件,我在其中定义了调用API的函数 define(['jquery', 'UIBlock'], function ($) { var GlobalParameters = function () { this.Parameters; this.APIEndPoint = 'http://localhost:24774/API
define(['jquery', 'UIBlock'], function ($) {
var GlobalParameters = function () {
this.Parameters;
this.APIEndPoint = 'http://localhost:24774/API/';
};
GlobalParameters.prototype.AjaxCallToServer = function (url, requestType, data, successCallback) {
$.blockUI();
$.ajax({
url: this.APIEndPoint + url,
data: data,
contentType: "application/json",
type: requestType,
statusCode: {
500: function () {
$('#info').html('<p>An error has occurred while processing your request.</p>');
$('#info').show();
},
409: function (xhr, ajaxOptions, thrownError) {
var message = JSON.parse(xhr.responseText).ExceptionMessage;
$('#info').html(message);
$('#info').show();
},
204: function (data) {
$('#info').html('<p>No data found.</p>');
$('#info').show();
}
},
dataType: 'json',
success: successCallback,
complete: function () {
$.unblockUI();
setTimeout(function () {
$('#info').hide();
$('#info').html("");
}, 3000);
}
});
};
return {
GlobalParameters: GlobalParameters
}
});
define(['jquery','UIBlock'],函数($){
var GlobalParameters=函数(){
这是参数;
这是我的名字http://localhost:24774/API/';
};
GlobalParameters.prototype.AjaxCallToServer=函数(url、请求类型、数据、successCallback){
$.blockUI();
$.ajax({
url:this.apident+url,
数据:数据,
contentType:“应用程序/json”,
类型:requestType,
状态代码:{
500:函数(){
$(“#info”).html(“处理您的请求时出错。”;
$('#info').show();
},
409:函数(xhr、ajaxOptions、thrownError){
var message=JSON.parse(xhr.responseText).ExceptionMessage;
$('#info').html(信息);
$('#info').show();
},
204:功能(数据){
$('#info').html('未找到数据。');
$('#info').show();
}
},
数据类型:“json”,
成功:成功,
完成:函数(){
$.unbui();
setTimeout(函数(){
$('#info').hide();
$('#info').html(“”);
}, 3000);
}
});
};
返回{
全局参数:全局参数
}
});
我添加了调试器,发现它只被调用了一次
这是谷歌chrome开发者工具的网络追踪。
以下是每个请求的详细信息
它的正常行为称为预飞行请求。与简单请求不同,“预飞”请求首先向另一个域上的资源发送HTTP OPTIONS请求头,以确定发送实际请求是否安全
有关更多详细信息,请参阅。感谢Sanjay的回复,我的问题是它调用了成功回调两次。有没有办法从反应中辨别出是飞行前反应还是实际反应?@alok_dida这是不可能的。浏览器本身发出选项请求,与ajax的成功无关。。。只有当它被拒绝,然后进入ajax时error@charlietfl .. 问题是,如果您看到我的AJAX调用代码,我已经专门为不同的状态代码编写了代码。在PUT API调用期间,我得到两个不同的响应。一个是200(飞行前请求),另一个是409(实际请求)。因此,我可以在屏幕上看到两条消息。有没有办法避免或识别响应是来自飞行前请求还是实际请求?@alok_dida我怀疑您正在对该选项请求运行服务器端逻辑,而没有检查请求方法。该请求本身不会触发任何ajax成功处理程序<代码>$。ajax对此一无所知