0

こんにちは、データを取得するために外部サーバーに接続する必要があります。彼らは私に彼らのスクリプトを使用するように言いましたが、それが間違っていたので何かを修正しなければなりませんでした。リクエストをランチしようとすると、問題が発生します。Internet Explorer コンソールにエラーを返す

SCRIPT10: この操作の完了に必要なデータはまだ利用できません。

これは私の JavaScript ページです。問題は、結果を印刷するのに間に合うようにクエリが終了しないためだと思います。準備ができてエラーを返さないときに結果を印刷するにはどうすればよいですか? すべてのリクエストにコメントを付けて、メソッドのみを「オープン」のままにしようとしましたが、毎回エラーが返されます。どうして??

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<script type="text/javascript">
var req = null ;
function sendRequest(){
    var urlStr="www.test.it";
    var xmlString="";
    xmlString+="<?xml version='1.0' encoding='UTF-8'?><some xml>";

    createHTTPRequestObject();
    var resp = getResponseText(urlStr+"?"+xmlString,null);

    var xmlDoc;
    xmlDoc = new ActiveXObject('Microsoft.XMLDOM');
    xmlDoc.async = false;

    xmlDoc.loadXML(resp);
    alert(xmlDoc.xml);
}

function createHTTPRequestObject(){
    req=null ;
    var pXmlreq = false ;
    if (window.XMLHttpRequest) {
        pXmlreq = new XMLHttpRequest();
    } 
    else if (window.ActiveXObject) {
        try{
            pXmlreq = new ActiveXObject("Msxml2.XMLHTTP");
        } 
        catch (e1) {
            try{
                pXmlreq = new ActiveXObject("Microsoft.XMLHTTP");
            } 
            catch (e2) {
            }
        }
    }
    req = pXmlreq ;
}

function getResponseText(action,query,method,async,contenttype){
    if(method==null){
        method="POST";
    }
    if(async==null){
        async="true";
    }
    if(contenttype==null){
        contenttype = "application/x-www-form-urlencoded";
    }
    req.open(method,action, async);
    req.setRequestHeader("Content-Type", contenttype);
    if(query){
        req.send(query);
    }else{
        req.send();
    }
    return req.responseText ;
}
</script>
</head>
<body>
<input type="button" name="Request" value="Request" onclick="sendRequest();"/>
<div id="content" />
</body>
</html>
4

1 に答える 1

2

準備が整う前に responseText を読み取ろうとしています。非同期呼び出しを同期として扱っているようです。それが問題だろう。

于 2013-03-06T14:55:06.207 に答える