2016-02-26 235 views
0

您好,我有一些麻煩解析來自一個ruby函數的JSON呈現數組,到一個JAVASCRIPT數組。JSON解析中的空數組

紅寶石函數genereta 12張的隨機數從「S」到「e」:

def genArrayNum(s,e) 
start=s 
i=0 
nums=Array.new 
array=Array.new 
     while s<e 
      nums.push s+1 
      s+=1 
     end 
    while i<12 
    j=rand(0..11) 
    array.push nums[j] 
    nums.delete_at(j) 
    i+=1 
    end 
return array 
end 

紅寶石函數呈現JSON陣列,我將傳遞到AJAX功能,我將從一個按鈕調用:

def generateSound 
i=0 
path="audios/" 
s=Puntata2.find(2).audioStart 
e=Puntata2.find(2).audioEnd 
array=genArrayNum(s,e) 
array2=Array.new 
    while i<12 
    param=path+StimoloAudio.find(array[i]).name 
    array2.push param 
    i+=1 
    end 
render json:{arr2:array2} 
end 

的2個紅寶石功能正常工作產生,我需要

這裏JS功能的聲音的所有路徑:

function call_ajaxEs2(){ 
    $.ajax({ type:'POST', url:'/esercizio2s/generateSound',data{}, 
    success:function(data){ 
     var obj=JSON.parse(data.arr2); 
     return obj; 
    }, 
    error:function(){ 
    alert("Error call_ajaxEs2()"); 
    } 
}); 

} 現在我調用這個函數在那裏我已經解析了數組:

function stickman(){ 
    var arr=call_ajaxEs2(); 
    var stickCounter=0; 
    if(stickCounter<12){ 
     if(arr=null)alert("arr null"); 
     document.getElementById('cloud-sndEs2').setAttribute("src",arr[stickCounter]); 
    stickCounter++; 
    }else alert("end stickman"); 
} 

所以問題是:每次我刷新頁面或我開始alert("arr null")出現的頁面,從而使意味着我解析的數組是空的。 那我在哪裏錯了?錯誤在哪裏? 謝謝。

回答

0

AJAX是異步的,所以回報不夠。從你的ajax進行函數調用。

function call_ajaxEs2() { 
 
    $.ajax({ 
 
    type: 'POST', 
 
    url: '/esercizio2s/generateSound', 
 
    data {}, 
 
    success: function(data) { 
 
     var obj = JSON.parse(data.arr2); 
 
     stickmancb(obj); 
 
    }, 
 
    error: function() { 
 
     alert("Error call_ajaxEs2()"); 
 
    } 
 
    }); 
 
} 
 

 
function stickman() { 
 
    call_ajaxEs2(); 
 
} 
 

 
function stickmancb(arr) { 
 
    var stickCounter = 0; 
 
    if (stickCounter < 12) { 
 
    if (arr = null) alert("arr null"); 
 
    document.getElementById('cloud-sndEs2').setAttribute("src", arr[stickCounter]); 
 
    stickCounter++; 
 
    } else alert("end stickman"); 
 
}

+0

我已經忘了告訴你,我調用函數火柴人()從一個名爲「火柴人」按鈕,因爲我需要更改和複製目標聲音每次我一下就可以了,我的意思是:第一次點擊我聽到的聲音,第二次點擊聲音變化與下一個並重現它,我做這個操作,直到我達到12聲音轉載 –

+0

@盧克抱歉的遲到的答覆。我更新了答案。 – RRK

+0

語法錯誤:JSON.parse:第1行的JSON數據的列1意外的字符...所以現在我覺得現在的問題是,我從紅寶石函數生成JSON ... –