JQuery $.post 在 VS 2010 实例中有效,但在我在 IIS 7.5 中部署时无效

Posted

技术标签:

【中文标题】JQuery $.post 在 VS 2010 实例中有效,但在我在 IIS 7.5 中部署时无效【英文标题】:JQuery $.post works in VS 2010 instance but not when I deploy in 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 更改事件! 【参考方案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 显示了从服务对象检索到的数据

以上是关于JQuery $.post 在 VS 2010 实例中有效,但在我在 IIS 7.5 中部署时无效的主要内容,如果未能解决你的问题,请参考以下文章

VS 2010 post build,show application console

如何更改 jslint(VS 2010 扩展名)以忽略文件?

有没有办法在 VS2010 中模拟中等信任度

C/C++怎么实现post数据提交?

无法在带有 SP1 的 VS2010 中调试 javascript

jquery 序列化和 $.post