2009-05-29 1 views
1

私はカーソルを待機状態(砂時計)にしてから、同期AJAX要求を送信しているところで関数を実行しています。応答を得た後、カーソルをデフォルト状態にしています。なぜHourGlassはGoogle Chromeの同期AJAXリクエストで動作しないのですか?

実際のコードはこれです..

//はSMTP設定 関数TestSettings(){ するvar buttonparams =新しいオブジェクト()をテストし、

buttonparams.IsCommandButton = true; 
buttonparams.ButtonId = "testsettings"; 
buttonparams.ButtonText = "Sending Test Mail..."; 
buttonparams.ButtonOrigText = "Test Settings"; 

if(buttonparams.IsCommandButton == true) 
    HandleButtonStatus(true, buttonparams); 

var request = function() 
{ 
    var ret = SendForm(buttonparams); 

    alert(ret); 

} 
window.setTimeout(request, 0); 

}

関数SendForm(pButtonParams) {VARのHTTP。 var formdata;

http = yXMLHttpRequest(); 

http.open("POST", "./", false); 
http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
http.setRequestHeader("Req-Type", "ajax"); 
formdata = xEncodePair("_object", "PrefMgr")+ "&"; 
formdata += xEncodePair("_action", "SmtpTest")+ "&"; 
formdata += GetEncodedFormData(); 

http.send(formdata); 

if(http.status == 200) 
{ 
    if(pButtonParams.IsCommandButton == true) 
     HandleButtonStatus(false, pButtonParams); 

    return (http.responseText); 
} 
else 
{ 

    return ("Error " + http.status + ": " + http.statusText); 
} 

}

機能HandleButtonStatus(pIsButtonStatusChange、pButtonParams) {VARボタン= yById(pButtonParams.ButtonId)。

if(pIsButtonStatusChange) 
{ 
     document.body.style.cursor = "wait"; 
    button.value = pButtonParams.ButtonText; 
    button.disabled = true; 

} 
else 
{ 
    document.body.style.cursor = "default"; 
    button.disabled = false; 
    button.value = pButtonParams.ButtonOrigText; 
} 

}

+0

同期AJAXリクエストを使用しないでください。リクエストが完了するまでブラウザをロックします。 – PatrikAkerstrand

答えて

1

割り当てよう:

var st = document.body.style; 

、次いで両方の関数でstを指します。これは、AJAXコールバック関数のスコープの問題である可能性があります。

EDIT:カーソルの形状を復元するためにコールバック関数を使用します。 AJAX呼び出しが失敗した場合でも同じことをすることを忘れないでください。

+0

ya..nowそれはうまくいっていますが、もう1つの問題です。 カーソルをアプリケーションの目的を待つ前に作成しています。私がそれを作成している場合、再びHourGlassはGoogle Chromeで動作していません。私は、時間ガラスが動作しているオブジェクトの文を作成するコメントです。どうして? 私は与えられたコードを更新します。 –

+0

私は完全なコードまたはこの機能を提供するべきだと思います。他のものに関連するものがあります。 – Thevs

+0

今私はそれを得た。リクエスト機能は古典的なクロージャです。 var objを作成すると、 'request'関数ポインタを解放するグローバルコンテキストを作成します。 これはどのように動作するのですか? '要求 '機能が最初に呼び出されると、期待通りに動作し、AJAX要求を送信します。 AJAXの補完では、 'obj'を外側のスコープで定義して閉じない限り、' request'関数のコンテキストはもう存在しません。 同期AJAX呼び出しでさえ、コールバック関数を介して非同期で動作します。コールバック関数(onstatechangeを使用)では 'request'ではなくカーソルを設定する方がよいでしょう。 – Thevs

関連する問題