1

配列を埋めるjQueryajax呼び出しがあります。この配列は、別の関数でアクセスできる必要があります。実際にはFireFoxとSafariにありますが、IEにはありません。IEによると:SCRIPT5007プロパティ'name'の値を取得できません:オブジェクトがnullまたは未定義です

'globalDataArray[i].name'と'globalDataArray[i].objectid'に問題があるようです。どちらもFFとIEによって完全に評価および使用されているため、実際には空ではありません。なぜこれが起こるのかについて誰か考えがありますか?私はたくさんググった。最後にコンマなどを使用する一般的な問題は解決策ではありません。

ここでvarが設定されます:

var globalDataArray = [];
function retrieveContentData(content){


    $.ajax({
        url: 'http://services.arcgis.com/nSZVuSZjHpEZZbRo/ArcGIS/rest/services/NLCito/FeatureServer/0/query',
        data: {
            where: content,
            geometryType: 'esriGeometryEnvelope',
            spatialRel: 'esriSpatialRelIntersects',
            outFields: '*',
            returnGeometry: false,
            returnIdsOnly: false,
            returnCountOnly: false,
            f: 'pjson'
        },
        success: function(data){
            data = $.parseJSON(data);//Always parse JSON data
            var features = data.features;
            for (var i=0; i<features.length; i++) {
                //globalDataArray.push(features[i].attributes.NAME);
                //globalDataArray[features[i].attributes.OBJECTID] = features[i].attributes.NAME;
                globalDataArray[i] = {  "objectid": features[i].attributes.OBJECTID,
                                        "name": features[i].attributes.NAME,
                                        "type": features[i].attributes.Type
                                        };
            }
            shuffle(globalDataArray);//Shuffle the array items

            //Count total and set progress report
            $('#totalTasks').text(features.length);

            //Initialize the progress bar and create the first task
            updateProgressBar(0);
            createNewTask();

        }//End success
    });//End Ajax call

}//End function

そして、ここで私はそれを再び使用したいと思います:

function validateAnswer(){
    //Prevent validating if task div not shown
    if($('#task').is(":visible")){

        var passedTask = false;

        var typedAnswer = $('#taskAnswerInput').val();

        var desiredAnswer       = globalDataArray[i].name;
        var desiredAnswerShort  = desiredAnswer.replace(/\(.*?\)/, "");//Remove eveything within and with bracklets
        desiredAnswerShort      = jQuery.trim(desiredAnswerShort);//Remove any whitespace on beginning and end of the string

        if(typedAnswer === desiredAnswer || typedAnswer === desiredAnswerShort){
            alert('Exact, helemaal goed!');
            $('#tasksRight').text(parseInt($('#tasksRight').text()) +1);
            passedTask = true;
            updateProgressBar(i);
        }else{
            alert('Jammer, dat is niet het goede antwoord');
        }

        if(passedTask == true){
            nextTask();
        }
    }//end if visible
}

これで、createNewTask()関数が呼び出されます。

var i = 0;
function createNewTask(){
    //Since a new tasks is started, let's update the progress
    $('#tasksDone').text(i);

    //Highlight a single place
    executeQuery(globalDataArray[i].objectid);

    //Change tasks text
    var type = globalDataArray[i].type;
    if(type === 'Plaats'){ type = 'Welke plaats';}
    if(type === 'Gebied'){ type = 'Welk gebied';}
    if(type === 'Water'){ type = 'Welk water';}
    if(type === 'Provincie'){ type = 'Welke provincie';}
    $('#taskPointType').html(type);

    $('#taskAnswerInput').val('');//Clear the input field
}

function giveupTask(){
    var correctAnswer = globalDataArray[i].name;
    alert(correctAnswer);
    $('#tasksWrong').text(parseInt($('#tasksWrong').text()) +1);//Update currentWrong
    nextTask();
}

//Aparte functie, om validateAnswer() flexibeler te houden
function nextTask(){
    //fire new task
    i++;
    if(i < globalDataArray.length){
        //Update progressbar
        updateProgressBar(i+1);//+1 since i starts with 0
        createNewTask();
    }else{
        //All tasks done
        alert('Einde, alle plaatsen gehad');
    }
}
4

1 に答える 1

0

解決しました。興味のある方へ:

IEが常に正しいエラー、jquery ajaxの成功、完全なエラー関数を返すとは限らないようです。結局、問題はクロスドメインのajax-callにあることが判明しました。dataType:jsonpを使用していない限り、IEはそれらをブロックしています。通常のjsonだけでは十分ではありません。

あなたの考えを共有してくれてありがとう!

于 2012-10-04T11:59:16.503 に答える