web-dev-qa-db-ja.com

IE7およびIE8でのWebforms Ajaxファイルのアップロードの問題

Webフォームのファイルアップロードフィールドは、IE7とIE8を除くすべての場所で機能します。アップロードボタンをクリックすると、次のようなjsアラートが表示されます

「/ file/ajax/submitted/nameofmyuploadfield/form-reallylongrandomstringの処理中にエラーが発生しました:」

私はjQuery Updateモジュールを介していくつかの異なるバージョンのjQueryを試しましたが、役に立ちませんでした。新しいdrupalインスタンスですぐにWebformモジュールを試してみたところ、同じエラーが発生しました。WebformファイルのアップロードがIE7で機能することは決してないので、 IE8でも、それが私の状況の現実のようです。この問題を克服するための知識を教えてください。

すぐに使えるWebフォームファイルのアップロードがIE7およびIE8で機能しない例 http://bonkmas.com/vids/node/4

1
Emanegux

私はこの奇妙な問題を解決することができました。正しいツールをデバッグできれば、根本的な原因は比較的簡単に見つけることができました。これはIE7/8の問題です。私の問題はアダプティブイメージスタイルに関連していましたが、現在は無効にしても機能します。

ここでの答え: IE8デバッグ(スタックオーバーフロー) は、IE8でのデバッグ機能を向上させるのに役立ちます。

Eに監視を設定し、エラーがスローするものを確認して、次にどこを見ればよいかヒントが得られるかどうかを確認します。

ここで特に遭遇した問題は/misc/ajax.jsにあるので、このファイルを開いて、239行目から次の変更を加えます。

//try {
    if (ajax.form) {
      // If setClick is set, we must set this to ensure that the button's
      // value is passed.
      if (ajax.setClick) {
        // Mark the clicked button. 'form.clk' is a special variable for
        // ajaxSubmit that tells the system which element got clicked to
        // trigger the submit. Without it there would be no 'op' or
        // equivalent.
        element.form.clk = element;
     // }

      ajax.form.ajaxSubmit(ajax.options);
    }
    else {
      ajax.beforeSerialize(ajax.element, ajax.options);
      $.ajax(ajax.options);
    }
  }
  //catch (e) {
    // Unset the ajax.ajaxing flag here because it won't be unset during
    // the complete response.

    ajax.ajaxing = false;

    alert("An error occurred while attempting to process " + ajax.options.url + ": " + e.message);
  //}

IEインスペクターでエラーが発生している場所を覆い隠していたため、try/catchを削除します。これらの変数のそれぞれにブレークポイントを設定し、ajaxにウォッチを設定します。ページを表示し、各変数をチェックするエラーを続行します。エラーが発生すると、コンソールは、エラーをスローしているファイルに移動します。

これがお役に立てば幸いです。

0
Daniel Waters