2

这是我的ajax调用:

response = $.ajax({
            type: "POST",
            url: "/Row/getRowName",
            dataType: "json",
            data:({ currRow : rowName, offset : 5 }),
            error:function(request){alert(request.statusText)},
            success:function(result){alert(result)}
        }).responseText;

我收到内部服务器错误作为警报。我还在我的 RowController 的方法 getRowName 中设置了一个断点。

这是 getRowName 方法:

    [AcceptVerbs(HttpVerbs.Post)]
    public string getRowName(string currRow, int offset)
    {
        string rowName;

        rowName = _rowRepository.getRowNameByOffset(currRow, offset);

        return rowName;
    }

是什么导致内部服务器错误?我该如何解决?我是否正确使用了整个控制器概念,还是应该将 WebServices 用于此类事情?

编辑:调用页面的控制器是 HomeController,而我正在调用的是 RowController。RowController 与 HomeController 位于同一文件夹中(不确定是否重要)。

但是我发现如果我创建了一个模拟函数:

    [AcceptVerbs(HttpVerbs.Post)]
    public string sayHi()
    {
        return "Hi";
    }

并以相同的方式调用它(不同的 url,因为它在家庭控制器中):

response = $.ajax({
            type: "POST",
            url: "/Home/sayHi",
            dataType: "json",
            error:function(request){alert(request.statusText)},
            success:function(result){alert(result)}
        }).responseText;

关于为什么这会起作用而另一个不会起作用的任何想法?

4

5 回答 5

3

你在运行 IE8 或 Firefox 并安装了FireBug吗?在任何一个中使用脚本控制台都会为您提供更多关于您从服务器获得的错误详细信息的信息。

您发布的两种方法之间的区别在于参数-您编辑中的第二种方法没有任何参数,而第一种方法中的方法有一些-我敢打赌您看到的错误是与没有正确反序列化数据的框架有关。

首先,您是否尝试过:

data:"{ \"currRow\":\"" + rowName + "\", \"offset\":\"5\" }" 
于 2009-06-24T08:01:17.380 回答
0

您的服务器应该具有弹性。JQuery 或任何客户端所做的任何事情都不会导致 HTTP 500 错误。至于服务器,您提供的代码没有解释任何内容。它归结为:

return _rowRepository.getRowNameByOffset(currRow, offset)

因此,我们可能至少需要 getRowNameByOffset 的来源才能开始弄清楚它。

编辑:您可以尝试进行测试的另一个想法是让 getRowName 返回一些微不足道的东西,例如:

return "currRow" + " " + offset

以确保问题不在其他地方。

于 2009-06-24T02:03:40.483 回答
0

我认为您的问题可能是数据周围的括号。它真的应该只是一个用于参数的对象。如果我是对的,那么内部服务器错误是因为路由处理程序找不到合适的签名getRowName

为了让它工作,你还需要从你的方法中返回一个 JsonResult,而不是一个字符串。这也可能是问题所在,因为它可能只查找返回 ActionResult 的方法。

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult getRowName(string currRow, int offset)
{
    string rowName;

    rowName = _rowRepository.getRowNameByOffset(currRow, offset);

    return Json( new { RowName = rowName } );
}

此外,Ajax 调用不会产生对象。您需要让您的成功处理程序执行您尝试对响应执行的任何操作。

$.ajax({
        type: "POST",
        url: "/Row/getRowName",
        dataType: "json",
        data: { currRow : rowName, offset : 5 },
        error:function(request){alert(request.statusText)},
        success:function(result){
           $('#rowNameContainer').html( result.RowName );
        }
});

如果您确实需要变量中的结果(不太可能,但可能),那么您可以同步运行 ajax 调用(async: false)并在成功函数中设置一个变量。

$(...).click( function() {
   var response = null;
   $.ajax({
        type: "POST",
        async: false,
        url: "/Row/getRowName",
        dataType: "json",
        data: { currRow : rowName, offset : 5 },
        error:function(request){alert(request.statusText)},
        success:function(result){
           response = result.RowName;
        }
   });

   ... do something with response...
   return false;
});
于 2009-06-24T02:12:23.337 回答
0

我收到了 500 错误,因为我没有明确添加:

type: "POST",

一旦我添加了它,一切都很好。我没有明确地将 Action 方法标记为 GET 或 POST,因此我假设默认情况下它是 POST - 因此出现错误。

于 2011-04-03T23:43:12.047 回答
0

您还可以检查您的文件权限。如果您的服务器设置的比您的文件更严格,您也会收到此消息。

于 2019-04-21T02:08:22.383 回答