ASP.NET MVC Ajax调用在生产服务器上不起作用

本文关键字:服务器 不起作用 NET MVC Ajax 调用 ASP | 更新日期: 2023-09-27 18:12:36

它在本地主机上就像一个魅力,但在生产服务器上根本不起作用。

我的控制器方法是这样的:

[HttpPost]
public JsonResult VisualizaDebitos()
{
    var filtro = Request["filtro"];
    var emissao = DateTime.Parse(Request["emissao"]);
    var vencimento = DateTime.Parse(Request["vencimento"]);
    var mesCompetencia = int.Parse(Request["mesCompetencia"]);
    var anoCompetencia = int.Parse(Request["anoCompetencia"]);
    return Json(new { data = someprocesseddata }, JsonRequestBehavior.AllowGet);
}

还有ajax调用:

$.ajax({
    url: "/Mensalidade/VisualizaDebitos",
    datatype: "json",
    type: "POST",
    data: {
        filtro: $("#Participante").val(),
        emissao: $("#Emissao").val(),
        vencimento: $("#Vencimento").val(),
        mesCompetencia: parseInt($("#MesCompetencia").val()),
        anoCompetencia: parseInt($("#AnoCompetencia").val())
    },
    error: function (data) {
        if (data.status == 500) {
            jAlert('Response status: ' + data.status + ' (' + data.statusText + ')' +
                ''n'nVerifique se a url e/ou os parâmetros estão corretos e tente novamente.', 'Error');
        } else {
            jAlert('Error', 'Unknown error');
        }
    },
    success: function (result) {
        console.log(result.someprocesseddata);
        return false;
    }
});

我得到一个错误500内部服务器错误

我遗漏了什么?

ASP.NET MVC Ajax调用在生产服务器上不起作用

尝试以下操作:

var RootUrl = '@Url.Content("~/")';

然后将url调整为:

url: RootUrl + "Mensalidade/VisualizaDebitos",

编辑:我试过一些方法来看看如何或是什么,但这似乎更多的是一个处理错误,而不是发布错误。使用以下代码:

<input type="text" id="Participante" /><br />
<input type="text" id="Emissao" /><br />
<input type="text" id="Vencimento" /><br />
<input type="text" id="MesCompetencia" /><br />
<input type="text" id="AnoCompetencia" /><br />
<button onclick="test()">gotest</button>
<script>
    function test() {
        $.ajax({
            url: "/Home/VisualizaDebitos",
            datatype: "json",
            type: "POST",
            data: {
                filtro: $("#Participante").val(),
                emissao: $("#Emissao").val(),
                vencimento: $("#Vencimento").val(),
                mesCompetencia: parseInt($("#MesCompetencia").val()),
                anoCompetencia: parseInt($("#AnoCompetencia").val())
            },
            error: function (data) {
                if (data.status == 500) {
                    alert('500');
                } else {
                    alert('Unknown error');
                }
            },
            success: function (result) {
                alert('success');
                return false;
            }
        });
    }
</script>

您在HTTPPost中的代码似乎都符合以下值:测验2016年1月1日2016年1月1日5.6

然而,如果我在文本框中输入了其他内容,然后是日期或数字,则会抛出500错误。那么,这是如何输入的呢?格式正确吗?

您可以使用url:'@Url.Action("VisualizaDebitos","Mensalidade")'而不是url: "/Mensalidade/VisualizaDebitos"

请尝试一件事,用完整路径替换下面的url,并检查它是否有效。

url: "/Mensalidade/VisualizaDebitos",

如果有效,则需要使用绝对路径。

编辑:-

或者请只在post参数和测试中发送字符串值。就像发送int值一样,将其设为字符串,然后可以在控制器方法中将其转换为int。

var form = new FormData();
form.append("filtro", $("#Participante").val());
form.append("emissao", "$("#Participante").val());
form.append("vencimento",$("#Vencimento").val());
form.append("mesCompetencia", parseInt($("#MesCompetencia").val()));
form.append("anoCompetencia", "parseInt($("#AnoCompetencia").val()));

var settings = {
  "async": true,
  "crossDomain": true,
  "url": "http://",
  "method": "POST",
  "processData": false,
  "contentType": false,
  "mimeType": "multipart/form-data",
  "data": form
}
$.ajax(settings).done(function (response) {
  console.log(response);
});

你在那里做什么很愚蠢,我不想解释为什么,但这就是你学习的方式。我建议定义一个模型,并期望该模型作为json数据发布在您的端点上,或者让您的手弄脏lil'bithttps://www.asp.net/mvc/overview/older-versions/hands-on-labs/aspnet-mvc-4-helpers-forms-and-validation

尝试在ajax代码中用以下数据参数替换数据参数:

 data: {
        'filtro': $("#Participante").val(),
        'emissao': $("#Emissao").val(),
        'vencimento': $("#Vencimento").val(),
        'mesCompetencia': parseInt($("#MesCompetencia").val()),
        'anoCompetencia': parseInt($("#AnoCompetencia").val())
    },

不幸的是,这些响应都对我没有帮助。但我认为这不是Ajax调用问题。更具体地说,问题似乎出在服务器或IIS上。经过一些更改(包括这里的所有提示(,我在网络选项卡上遇到了一些不同的错误,就像@Div说的那样。

查看图片:

  • https://s21.postimg.org/fz6r1ww4n/image.png
  • https://s21.postimg.org/s2c2ph76v/image.png
  • https://s14.postimg.org/78vu85srl/image.png

更多想法?

我在服务器IIS上托管的应用程序也遇到了完全相同的问题。当我尝试调用ajax post方法时,我得到了同样的错误消息。最后,我通过在托管服务器上使用internet explorer进行故障排除。

我通过禁用IE上的">显示友好的HTTP错误消息"来解决此问题。禁用友好的HTTP故障消息,查看原始内容是否可以提供查看更多信息的方向。步骤:

  • 转到IE中的"工具"菜单"Internet选项">
  • 单击高级选项卡&然后取消选中"显示友好的HTTP错误"messages"选项,然后单击"确定">
  • 现在,当访问同一个网页时,更多的开发人员将显示有意义的错误消息

如果您想返回实际的错误详细信息,如异常详细信息、某个div元素上的stacktrace、

<div id="dialog" style="display: none"></div>

您可以将ajax function修改为

$.ajax({
    url: "/Mensalidade/VisualizaDebitos",
    datatype: "json",
    type: "POST",
    data: {
        filtro: $("#Participante").val(),
        emissao: $("#Emissao").val(),
        vencimento: $("#Vencimento").val(),
        mesCompetencia: parseInt($("#MesCompetencia").val()),
        anoCompetencia: parseInt($("#AnoCompetencia").val())
    },
    error: OnError
});

并将onError函数调用为:

function OnError(xhr, errorType, exception) {
                var responseText;
                $("#dialog").html("");
                try {
                    responseText = jQuery.parseJSON(xhr.responseText);
                    $("#dialog").append("<div><b>" + errorType + " " + exception + "</b></div>");
                    $("#dialog").append("<div><u>Exception</u>:<br /><br />" + responseText.ExceptionType + "</div>");
                    $("#dialog").append("<div><u>StackTrace</u>:<br /><br />" + responseText.StackTrace + "</div>");
                    $("#dialog").append("<div><u>Message</u>:<br /><br />" + responseText.Message + "</div>");
                } catch (e) {
                    responseText = xhr.responseText;
                    $("#dialog").html(responseText);
                }
                $("#dialog").dialog({
                    title: "jQuery Exception Details",
                    width: 700,
                    buttons: {
                        Close: function () {
                            $(this).dialog('close');
                        }
                    }
                });
            }

参考:本文

问题可能是数据库访问。如果它在暂存/开发服务器中工作,则您可能拥有正确的所有代码。。。它在Dev中工作,您拥有通用权限(管理权限(,但您可能正在使用应用程序池访问生产服务器,这意味着您需要将服务器添加为SQL server(或您选择的数据库(的登录名。

以下内容适用于SQL Server。。。你的同化可能会有所不同:

  1. 创建一个名为"的新SQL Server登录名;域''服务器$"并点击OK(不要试图通过使用"检查名称"选项来验证该用户。(

  2. 重新打开新用户并根据需要修改属性和授予权限。

  3. 刷新你的网站,等待魔术。

我知道这是一个老问题,但这是你期待已久的解决方案(或者至少对我来说是这样(。

;-(