0

次の Ajax 関数形式を使用しています。

var xmlhttp;

function addAddress(str)
{
 if (window.XMLHttpRequest)
  {
    xmlhttp = new XMLHttpRequest();
  }
  else
  {
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  }
  xmlhttp.onreadystatechange = function()
  {
     if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
     {
       //specific selection text
       document.getElementById('info').innerHTML = xmlhttp.responseText; 
     }
  }
  var addAddress = "add";
  xmlhttp.open("POST", "sys.php", true);
  xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  var queryString = "&addAddress=" + addAddress;
  xmlhttp.send(queryString);
}

function GetXmlHttpObject()
{
 if (window.XMLHttpRequest)
  {
    return new XMLHttpRequest();
  }
 if (windows.ActiveXObject)
  {
    return new ActiveXObject("Micorsoft.XMLHTTP");
  }
 return null;
}

これまでのところ、上記のような私の Ajax 関数はすべて正常に動作しています。ただし、現在、この機能は時々しか機能しません。ここで、関数を実行するために onclick イベントを数回クリックする必要がある場合があります。そうしないと、関数がハングし、約 4 分後に実行されます。

関数の一部をテストしたところ、問題は次の場所にあることがわかりました。

if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
 {
    alert(xmlhttp.status);
   //specific selection text
   document.getElementById('info').innerHTML = xmlhttp.responseText; 
 }

関数が機能すると、アラート (xmlhttp.status) を実行して 200 を取得できます。ただし、機能していない場合、アラート ボックスはトリガーされません。実際には何も起こらず、エラーさえもありません。

これはサーバーの問題でしょうか?私のウェブサイトがハッキングされたのではないかと考えていますが、Ajax 機能が適切に実行されていないことを受け入れる問題は見つかりません。

最後に、ローカルホストではこの問題は発生しません。ライブ Web サイトでのみ発生しています。

どんな助けでも大歓迎です。

ありがとう

4

2 に答える 2

1

まず、addAddress 関数をトリガーするボタンまたはコントロールをクリックしたときに、実際に addAddress 関数が呼び出されていることを確認します。

次のような最初の行の単純なアラートが機能します。

function addAddress(str)
{
    alert('addAddress has been called!')
    ....
}

アラートが表示されない場合は、関数の実行を妨げている JavaScript エラーがページにないことを確認してください。Firefox では、たとえば CTRL+SHIFT+J を押してエラー コンソールを表示します。

その部分が機能している場合は、ajax 要求の URL をブラウザーに直接入力して、その方法で診断してみてください。

ajax でこの URL をリクエストしているようです:

sys.php&addAddress= (address goes here)

ページがブラウザに直接読み込まれることを確認します。そうでない場合、問題は ajax リクエストではなく、sys.php ページ自体に問題があるため、ドリルダウンできます。

それが役立つことを願っています!

于 2012-11-02T23:31:25.300 に答える
0

これは私が期待していた答えではありませんでしたが、Web ホスト (GoDaddy) にサーバーを変更してもらい、問題を解決しました。ほぼ 1 年間、PHP で IIS7 を実行していました。問題が発生したことは一度もなかったので、そのままそのサーバーを使い続けました。Ajax のレイテンシの問題が解決策を見つけられなかったので、Apache に切り替えることにしました。変更後、すべてが再びスムーズに実行されるようになりました。

通知されていないソフトウェアの更新があったのではないかと考えています。あるいは、Web サイトが DDoS 攻撃を受け、Ajax リクエストのパフォーマンスが低下したのかもしれません。最後に、誰かが IIS に侵入して設定を変更した可能性があります。わかりませんが、私が知っているのは、サーバーが Apache に切り替えられた瞬間、ウェブサイトが正常に動作し始めたときだったということだけです。

みんなの提案に感謝します。

于 2012-11-03T20:20:46.373 に答える