【问题标题】:JQuery $.post works in VS 2010 instance but not when I deploy in IIS 7.5JQuery $.post 在 VS 2010 实例中有效,但在我在 IIS 7.5 中部署时无效
【发布时间】:2012-02-10 14:05:27
【问题描述】:

我检查了$.Post中的url,没问题。我还检查了连接字符串。整个网站上的一切都很好,包括 $.ajax 命令,除了一个 $.post 命令。我不断收到“保存记录时出错”消息。

我的代码是在 jquery 对话框的保存按钮上:

var post = $.post(url,
                        $("#myview").serialize(),
                        function () {
                            thisDialog.dialog("close");
                        });
                        post.error(function (xhr, ajaxOptions, thrownError) {
            alert("Error while saving the record");

当我在调试模式下运行时,这适用于本地 VS 实例,但当我将网站部署到 IIS 7.5 时它不运行。有人可以指导问题可能是什么吗?所有 dll 都存在,url 也很好

网址是:主页/开始

[HttpPost]
    public ActionResult Start(StartModel model, FormCollection collection)
            {
                try
                {
                    Service.Create(model);
                    return RedirectToAction("List");
                }

这在 VS 中有效,但在 IIS 7.5 中无效

我收到错误代码 500

堆栈跟踪显示错误消息:SqlDateTime 溢出。必须在 1753 年 1 月 1 日上午 12:00:00 到 9999 年 12 月 31 日晚上 11:59:59 之间

我正在使用 jquery 日期控件设置日期值。感谢任何指导。

【问题讨论】:

  • 你最后是怎么解决的?!我有同样的问题。神秘的是,它适用于 VS,甚至是陌生的 onClick 按钮(将传递日期选择器值)但不适用于 datepicker 更改事件!

标签: c# javascript jquery ajax asp.net-mvc-3


【解决方案1】:

将 customErrors 模式设置为“关闭”(在您的 web.config 中),然后调查 firebug 中的响应,您应该会看到从服务器返回的漂亮堆栈跟踪。只要确保你的 catch 块(你没有发布)看起来像:

try
{
// your code here
}
catch(Exception ex)
{
 throw;
}

(确保你没有做 throw ex;因为那样你会丢失堆栈跟踪)。

您可以从那里继续。

作为盲目猜测,可能会发生以下情况: 1.服务.创建(模型);失败(也许您没有该机器访问“服务”的权限,或者 2. 可能是你发布的数据太多,所以尝试增加 maxRequest 的长度

<configuration>
    <system.web>
        <httpRuntime maxRequestLength="102400" executionTimeout="1200" />
    </system.web>
</configuration>

不过,了解您的堆栈跟踪会很有用。

【讨论】:

  • 很好的答案。自定义错误关闭显示以下错误消息:SqlDateTime 溢出。必须在 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间,但问题是它适用于 VS 而不是 IIS。我正在使用 jquery 日历控件设置一个值 = 2011 年 1 月 2 日
  • 在本地,在调试中检查您的日期时间值,它也可能在您的本地副本中没有很好地传递,但在该 Service.Create(model) 调用中设置为某个默认值(这对我来说仍然是一个很大的谜团,因为我不知道它的作用,但很可能你的问题在其中)。
  • 另外,您应该确保您的 javascript 没有从该服务器上的某些先前部署中缓存(清除浏览器缓存以确保它包含最新部署中的所有内容)。
  • 是因为 IIS 服务器的美国日期时间安装了 SQL DB 而 VS 在英国时区?
  • 我认为这应该不是问题。你有没有尝试过我在前两个 cmets 中建议的东西?
【解决方案2】:

如果不更改当前设置中的任何内容,则可能只是日期格式错误。不要通过日历控件将日期设置为1/2/2011,而是尝试将其设置为1/2/2011 12:00:00 PM

或者重置datepickerdateFormat(其他格式here):

.datepicker({
    dateFormat: 'mm/dd/yy'
});

【讨论】:

  • 还有一个谜团是为什么它可以在 VS 而不是 IIS 服务器中工作。我真的很困惑,无法理解。可能是它需要它的 MSSQL 设置?可能 jquery 在 IIS 中的工作方式不同?可能是其他让时间变得重要的东西
  • 你有 FireBug 来查看实际发布的内容吗?
  • 好的,发送日/月/年。您是否尝试将 dateFormat 参数设置为月/日/年发送? (将更新答案)
【解决方案3】:

您是否尝试通过导航器的开发工具捕获 http 请求?你看到请求了吗?服务器的响应是什么?

【讨论】:

    【解决方案4】:

    没有更多信息,我只是在黑暗中拍摄,但可能是您使用的是相对 URL,例如 /bob/fred,并且服务器具有与本地应用程序不同的文件结构。

    假设您的应用具有以下结构:

    /bob/fred <- the directory you're accessing in the $.post call
    /jim/index.aspx <- the page you're calling $.post in
    

    当你把它放在服务器上时,从应用程序根开始的文件结构是这样的:

    /site/bob/fred
    /site/jim/index.aspx
    

    通过 VS 2010 运行应用程序时,这是正确的。但是在服务器上它需要一个不同的 URL。

    下一步应该使用 Firebug 检查 $.post 调用 - 看看您是否收到 404。如果是,上述信息应该会有所帮助。如果没有,请发布更多代码。

    【讨论】:

    • 在你说之前,我很感激你说你已经检查了 URL - 但是检查是否意味着你已经确保你没有收到 404 响应?
    • 我使用的是相对路径,但我猜应该没问题,因为对话框显示的 url 也是相对的。它唯一导致问题的保存?但你确实有一个好点。你觉得我能做些什么来测试
    • 下载 Firebug(适用于 Firefox,或 Dragonfly 用于 Opera,或使用 Chrome 的内置开发工具)并查看单击保存按钮时得到的响应。在 Chrome / Opera 中,右键单击页面并单击“检查元素”。现在转到屏幕底部的网络选项卡。在 Firefox 中,右键单击页面并转到“检查元素”,现在单击“网络”选项卡并刷新页面。
    • 好的,文件在那里,只是代码不起作用。你能再贴一些代码吗?
    • 添加了代码。这很奇怪,因为它在 VS 中工作,我知道代码中的服务对象不为空,因为对话框显示的 url 显示了从服务对象检索到的数据
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多