1
我正面临奇怪的问题。我正在实施一项SPA。我正在使用MVC,Sammy路由器,在这里需要JS和Knockout。
这里是一个文件,我定义了函数来调用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
}
});
我添加了调试器,发现它只被调用一次。
以下是每个请求的详细信息。
感谢Sanjay的回复,与我的问题是,它的调用成功回调两次。是否有任何方法可以从响应中识别出预检反应或实际响应? –
@alok_dida不可能。浏览器本身使OPTIONS请求,它与ajax成功无关...只有当它被拒绝,然后它进入ajax错误 – charlietfl
@charlietfl ..问题是,如果你看到我的AJAX调用代码,我有书面代码专门针对不同的状态代码。在我的PUT API调用过程中,我收到了两个不同的响应。一个是200(预检请求),另一个是409(实际请求)。由于这个原因,我可以在屏幕上看到两条消息。有没有什么方法可以避免或确定响应是来自Preflight请求还是实际请求? –