0

だから私は、JSONからランダムに選択されたテキストの一部を作成しようとしています(同じオリジンポリシーの問題により、実際にはJSONPです)ファイルがWebアプリに表示されます。

次のように乱数を生成します。

function randomNumberCreator(numberOfOptions){
    var randomNumber = Math.floor(Math.random()*numberOfOptions);
    return randomNumber;
};

私のJSONコードは次のようになります(これはサンプルです-続きます):

otmjsonp({

    "option2" : "this text",

    "option3" : "that text",

    "option4" : "some other text",

    });

そして、次のようなことができることを望んでいました:

$(".choice1").html(JSON.option+randomNumberCreator(4)); 

しかし、これは機能していないように見えるので、手の込んだ回避策を考え出す必要がありました (これは本当にばかげています、私は知っています):

function updateTree(){

$.ajax({

    url:"http://www.WEBSITE.com/json/newotmtree.php",
    type: "GET",
    dataType: "jsonp",
    jsonpCallback: "otmjsonp",
    async: false,   
    success: function(JSON){

    $(".initialChoices a").each(function(){
    $(this).show();
    });

    function rollDice(){
    diceRoll = randomNumberCreator(6);


    switch(diceRoll){
            case 1:
            $(".choice1").html(JSON.option1)
            $(".choice2").html(JSON.option2)
            $(".choice3").html(JSON.option3)
            break;

            case 2:
            $(".choice1").html(JSON.option1)
            $(".choice2").html(JSON.option5)
            $(".choice3").html(JSON.option6)
            break;

            case 3:
            $(".choice1").html(JSON.option1)
            $(".choice2").html(JSON.option8)
            $(".choice3").html(JSON.option9)
            break;

            case 4:
            $(".choice1").html(JSON.option1)
            $(".choice2").html(JSON.option11)
            $(".choice3").html(JSON.option1)
            break;

            case 5:
            $(".choice1").html(JSON.option1)
            $(".choice2").html(JSON.option3)
            $(".choice3").html(JSON.option4)
            break;

            case 6:
            $(".choice1").html(JSON.option1)
            $(".choice2").html(JSON.option4)
            $(".choice3").html(JSON.option9)
            break;

            default:
            alert("switch fail");

    }
    };

    rollDice();


    var option1 = JSON.option1;
    var option2 = JSON.option2;
    var option3 = JSON.option3;
    var option4 = JSON.option4;
    var option5 = JSON.option5;
    var option6 = JSON.option6;
    var option7 = JSON.option7;
    var option8 = JSON.option8;
    var option9 = JSON.option9;
    var option10 = JSON.option10;
    var option11 = JSON.option11;
    },
    error:function(){
    alert("error");
    }

}); };

完全を期すために、HTML を次に示します。

<ul class="initialChoices">
<li><p><a class = "choice1" href="#">AJAX FAIL</a></p></li>
<li><p><a class = "choice2" class="button" href="#">AJAX FAIL</a></p></li>                           
<li><p><a class = "choice3" class="button" href="#">AJAX FAIL</a></p></li>                    
</ul>

JSONP 応答を真にランダムにする方法はありますか (私が望んでいたことのように)、またはこの醜い解決策にこだわっていますか?

ありがとう!

4

3 に答える 3

1

正しいやり方は

$(".choice1").html(JSON["option"+randomNumberCreator(4)]); 
于 2013-06-10T14:12:43.693 に答える
0

何かのようなもの

$(".choice1").html(JSON["option" + randomNumberCreator(4)]); 

うまくいくかもしれません

于 2013-06-10T14:13:05.333 に答える
0

ランダムな値の場合、配列を使用する方がはるかに簡単です。JSON オブジェクトのプロパティ名を使用していないため、値だけで配列を埋めることができます。配列からランダムな値を選択するのは次のように簡単a[Math.floor(Math.random() * a.length)]です:

$.ajax({

    url:"http://www.WEBSITE.com/json/newotmtree.php",
    type: "GET",
    dataType: "jsonp",
    jsonpCallback: "otmjsonp",
    async: false,
    success: function(JSON){

      var a=[],i;
      for(i in JSON)a.push(JSON[i]);

      $(".initialChoices a").each(function(){
        $(this).html(a[Math.floor(Math.random() * a.length)]);
        $(this).show();
      });

    },
    error:function(){
    alert("error");
    }
});
于 2013-06-10T14:25:33.003 に答える