AJAX请求超时时出现404,即使文件存在,似乎是从不同的服务器请求


AJAX request is timing out with a 404 even though the file exists, seems to be requesting from a different server

我有一个网站,它使用jQuery的$.post方法将联系人表单提交给PHP脚本,该脚本处理信息并通过电子邮件发送。我已经在本地测试了这个脚本,它运行正常。当我尝试在服务器上运行它时,对处理脚本的ajax请求将保持(挂起)大约3分钟,然后返回404状态。但是,如果我检查请求并直接导航到请求URL,我可以看到脚本确实在那里,并且运行正常。

不过,最奇怪的是,它返回了一个nginx404错误。服务器运行的是Apache,而不是nginx。此外,该网站有一个自定义的404页面,如果您导航到任何不存在的页面,该页面都可以正常工作。

作为第一个测试,我创建了另一个PHP脚本,该脚本只需回显一个字符串,将其放在与表单处理脚本相同的位置,AJAX请求即可正常工作。这只是对处理脚本的请求没有通过。

您可以在这里查看带有联系表格和AJAX测试的页面。http://dev.alpha1marketing.com/contact/当你提交联系人表单时,加载程序将无限期旋转,如果你检查请求,你会看到它在返回神秘的404之前挂起几分钟。Ajax测试按钮几乎立即返回请求。

这是将表单提交发布到表单处理的代码(这不起作用)

# Post the form
$.post('/wp-content/themes/alpha1/ajax/send-contact.php', {
  firstName: $.trim($('#firstName').val()),
  lastName: $.trim($('#lastName').val()),
  email: $.trim($('#emailAdress').val()),
  referral: $.trim($('#referral').val()),
  comment: $.trim($('#comment').val())
},
(response)->
  # Show some messages
  return
)

这是发布到"测试"脚本的代码(这确实有效)

$.post('/wp-content/themes/alpha1/ajax/test.php', {
}, (response)->
  console.log response
  return
)

我很确定这与服务器/网络配置有关,但我不知道它的哪个方面http://dev.krasdalefoods.com/contact/,并且使用相同的表单处理代码也存在相同的问题。

这两个开发域托管在Bluehost上,计划在站点完成后将主域转移到Bluehost。客户端购买并最初配置了服务器的某些方面,然后允许我访问控制面板来设置我需要的东西,所以他们所做的事情可能导致了这个问题,但我不确定可能是什么。我相信主要的www.alpha1marketing.com和www.krasdalfods.com域托管在IIS上,所以这也不可能导致nginx错误。

如有任何调试帮助,我们将不胜感激!

原来nginx的问题只是转移注意力。问题是BlueHost不允许您通过外部SMTP服务器发送邮件,只能通过他们的服务器发送。我试图通过Gmail发送消息,但BlueHost阻止了该请求,这导致他们的nginx中间件只看到一个挂起的脚本并返回404。

不幸的是,我不得不将我的mailer脚本切换为使用PHP mail()。它仍然有效!