1

リンクをクリックしてファイルをダウンロードすると起動するajaxリクエストがあります。訪問者がダウンロードした顧客IDとファイル名でデータベースを更新するサーバー側ページが呼び出されます。Jquery1.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でエラーメッセージを受信して​​も、データベースが更新されます。クロムとサファリでは、エラーメッセージが受信され、何も更新されません。

ajax呼び出しで次の設定を使用してみましたが、どのブラウザーでも違いが見られませんでした。

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

これをSafariとChromeで機能させるために何が欠けていますか?

4

2 に答える 2

3

私は実際に問題の原因を見つけました-それはファイルをダウンロードするためにアクティブ化されたリンクによってajaxリクエストが中断されたことが原因でした。リンクをクリックすると、ajaxリクエストが発生しました。エラーメッセージのリクエストステータスは0でした。これは、リンクアクションが明らかにajaxリクエストを中断していたことを意味します。どうやらIEではリクエストが中断されなかったようですが、Firefox、Safari、Chromeであったため、エラーメッセージが表示されました。私はここで関連情報を見つけました:リンク

リンクの代わりにボタンをクリックするだけで起動するajaxリクエストをテストした後、これが当てはまることがわかりました。ボタンをクリックするだけで起動した場合、エラーメッセージなしですべてのブラウザで正常に機能しました。

回避策は、AJAXを使用する代わりに、クリックを記録して適切なダウンロードリンクにリダイレクトするサーバー側のページにユーザーを送信することです。

于 2012-06-06T21:31:04.060 に答える
1

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,
于 2012-06-06T12:32:37.963 に答える