Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery $.ajax通过它两次调用API';It’只有一次电话_Jquery_Ajax_Asp.net Mvc_Requirejs_Sammy.js - Fatal编程技术网

Jquery $.ajax通过它两次调用API';It’只有一次电话

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

我面临着一个奇怪的问题。我正在实施一个SPA。我正在使用MVC,Sammy router,这里需要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
    }
});
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对此一无所知