【问题标题】:Ajax request not working in Safari, ChromeAjax 请求在 Safari、Chrome 中不起作用
【发布时间】:2012-06-05 23:58:24
【问题描述】:

我有一个 ajax 请求,当单击链接下载文件时会触发该请求。调用服务器端页面,使用访问者下载的客户 ID 和文件名更新数据库。使用 Jquery 1.5.1。这是链接html:

<a href="/downloads/whatever.zip" class="software">click here to download</a>

ajax请求的写法如下,其中包含一个ajax请求出错时通知的函数:

$(document).ready(function() {
  //function to alert an error message if request is unsuccessful
  function ajaxError(request, type, errorThrown)
  {
  var message = "There was an error with the AJAX request.\n";
  switch (type) {
      case 'timeout':
          message += "The request timed out.";
          break;
      case 'notmodified':
          message += "The request was not modified but was not retrieved from the cache.";
          break;
      case 'parseerror':
          message += "XML/Json format is bad.";
          break;
      default:
          message += "HTTP Error (" + request.status + " " + request.statusText + ").";
  }
  message += "\n";  
  alert(message);
  }


$('a.software').click(function() {  
//get the path of the link, and just the file name to be stored in the database
var filePath = $(this).attr("href");
var partsArray = filePath.split('/');
var theFileName = partsArray[partsArray.length-1];


  $.ajax({
     type: "POST",
     url: "/validate/softwareDownloadedCustomer.asp?custID=<%=custID%>&fileName=" + theFileName,
     success: function(msg) {
      alert("Success");
     },
     error: ajaxError
    });
  }); 
});

服务器端代码不是问题,当它被另一个页面而不是 ajax 请求调用时,它按预期工作。奇怪的是,ajax 请求在 Firefox 和 IE 中有效,但在 Chrome 和 Safari 中无效。在 IE 中,会提示“成功”消息并更新数据库。在 Firefox、Chrome 和 Safari 中,我提示的错误消息如下:

There was an error with the AJAX request.
HTTP Error (0 error)

即使在 Firefox 中收到错误消息,它也会更新数据库。在 chrome 和 safari 中,收到错误消息并且没有任何更新。

我已尝试在我的 ajax 调用中使用以下设置,但在任何浏览器中似乎都没有什么不同:

contentType: "application/json; charset=utf-8",
dataType: "json", 'data' 

要让它在 Safari 和 Chrome 中运行,我缺少什么?

【问题讨论】:

  • 如果你在ajaxError里面放一个断点,用控制台调试,typeexceptionThrown的值是多少?另外,softwareDownloadedCustomer.asp 返回什么(HTML、JSON 等)?
  • 谢谢,我无法获取使用 firebug 控制台抛出的类型和异常的值。使用警报时,“类型”的值为“错误”,我得到“错误抛出”的空白值。抱歉含糊不清,我对使用 firebug 调试和获取错误参数的值没有经验。 “request.status”的值为“HTTP错误”,request.statusText为“0错误”。
  • 关于响应:softwareDownloadedCustomer.asp 返回简单文本“数据已添加到服务器。”我试图将响应插入到包含 ajax 请求的页面中,如下所示: var response = XMLHttpRequest.responseText; $("#serverResponse").innerHTML=response;但由于我收到一条错误消息,#serverResponse 中没有显示任何内容。然而,在 firefox 和 IE 中,数据被发布到数据库中(我在单独的页面上写入数据插入的记录内容),但数据不会使用 chrome 或 safari 发布到数据库中。

标签: javascript jquery ajax asp-classic


【解决方案1】:

我实际上找到了导致问题的原因 - 这是由于 ajax 请求被激活下载文件的链接所中断。通过单击链接触发 ajax 请求。错误消息的请求状态为 0,这意味着链接操作显然正在中断 ajax 请求。由于某种原因,显然在 IE 中请求没有被中断,但它在 firefox、safari 和 chrome 中,因此出现错误消息。我在这里找到了相关信息:link

在测试 ajax 请求以通过简单的按钮单击而不是链接触发后,我知道情况就是如此。它在所有浏览器中都能成功运行,只需单击一个简单的按钮即可触发。

解决方法是不使用 AJAX,而是将用户发送到记录点击的服务器端页面,然后重定向到相应的下载链接。

【讨论】:

  • 很高兴你弄明白了,有时你必须分解它才能找到这些类型问题的根源
  • 您实际上可以在点击功能中使用setTimeout(function() { $.ajax(..); }, 0); 来完成这项工作
【解决方案2】:

您的 Ajax 请求使用 POST 但不发布任何数据。您传递的数据是通过您的 URL 请求参数。

尝试将您的 ajax 类型更改为 GET

type: "GET",      
url: "/validate/softwareDownloadedCustomer.asp?custID=<%=custID%>&fileName=" + theFileName, 

或通过发布数据传递您的参数

var dataToPost = 'custID=<%=custID%>&fileName=' + theFileName;

type: "POST",      
url: "/validate/softwareDownloadedCustomer.asp", 
data : dataToPost,

【讨论】:

  • 谢谢 - 我尝试将查询字符串数据保留在 URL 中并使用 ajax type="Get",但没有成功。然后我尝试保留“POST”,并通过“data:dataToPost”而不是查询字符串传递参数,并在softwareDownloadCustomer.asp文件中成功读取它(使用json2库)。在 IE 和 Firefox 中,数据已成功发布并插入数据库,但在 Chrome 和 Safari 中再次收到错误,没有发布数据。有趣的是,虽然我在 Firefox 中收到了相同的错误消息,但数据实际上已发布并存储在数据库中。
  • 刚刚编辑了我的帖子 - 你会看到我得出的结果与以前基本相同,IE 中的成功消息,firefox 中的错误消息,成功发布和错误消息,Chrome 中没有帖子野生动物园
  • 经过更多测试 - 虽然我在每次尝试使用 firefox 时都会收到错误消息,但如果我重新加载包含 ajax 请求的页面,它只会成功发布到数据库。
  • 您确定您的相对网址正确吗?有些浏览器比其他浏览器更宽容。
  • 是的 - 感谢您的输入 - 我找到了导致问题的原因 - 这是由于 ajax 请求被激活下载文件的链接中断。通过单击链接触发 ajax 请求。错误消息的请求状态为 0,这意味着链接操作显然正在中断 ajax 请求。出于某种原因,显然在 IE 和 Opera 中请求没有被中断,但它在 firefox、safari 和 chrome 中,因此出现错误消息。我在这里找到了相关信息:(bartwullems.blogspot.com/2012/02/…)。
猜你喜欢
  • 2018-04-20
  • 1970-01-01
  • 1970-01-01
  • 2014-10-14
  • 2019-06-14
  • 2016-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多