2017-02-16 14 views
0

グローバルなJavaScript変数にアクセスして、データの一部としてAJAX関数に渡そうとしています。 imageIndexが現在のコンテキストに存在しないため、これを行う方法に苦しんでいます。 Javascriptを:JavaScriptインデックス変数を使用してViewBag配列アイテムにアクセスする

<script type="text/javascript"> 
     var imageIndex = 0; 
     $(document).ready(function() { 
      var imageIndex = 0; 

      getImage(); 

      function getImage() { 
       $.ajax({ 
        type: "GET", 
        url: '@Url.Action("GetImage", "Tally")', 
        data: { imageName: '@(ViewBag.images[imageIndex])', contractID: '@(ViewBag.contractId)' }, 
        //dataType: "image/jpeg;base64", 
        success: function (data) { 
         console.log(data); 
         $('#scanImage').attr('src', 'data:image/jpeg;base64,' + data.myImage); 
         $("#imageName").val('@(ViewBag.image)'); 
         imageIndex++; 
        }, 
        error: function() { 
         console.log("got error"); 
        } 
       }); 
      } 
     }); 

    </script> 
+0

なぜimageindexを2回初期化しましたか? –

+0

あなたのコードには2つの 'imageIndex'変数があり、' $ .ajax'呼び出しで実際に*両方の*スコープに入っていますか? – Bergi

+0

この '@(...)'構文は何ですか?クライアント側とサーバー側の処理を混在させていると思います。 – Bergi

答えて

4

号(S)

トップからあなたのimageIndex初期化のいずれかを削除してください。すべての意図と目的のために、私はあなたのケースでどちらが本当に問題ではないと言います。

imageIndexはストリングはなく、変数の値としてimageNameの一部として含まれています。


トリッキーな部分

レイザーは、私たちが通常のようなものにすることで同じように、私たちは、単に変数を連結させません。私たちは、単一引用符を含めているので

imageName: '@(ViewBag.images[' + imageIndex + '])' 

をサーバ側では@、C#はあなたに溢れているリテラルがあることを伝えます。


ソリューション

代わりに、我々はViewBag.images配列からノーマルjavascript配列を移入する必要があります。

var imageArray = @Html.Raw(Json.Encode(@ViewBag.images)); 
// var imageArray = ["image1", "image2", "image3"]; 

そこから、我々は今、我々が探している値を取得するためにimageArray[imageIndex]を使用することができます。

$(document).ready(function() { 
    var imageIndex = 0; 

    //Convert our ViewBag.images into a JS array 
    var imageArray = @Html.Raw(Json.Encode(@ViewBag.images)); 
    getImage(); 

    function getImage() { 
     $.ajax({ 
      type: "GET", 
      url: '@Url.Action("GetImage", "Tally")', 
      data: { imageName: imageArray[imageIndex], contractID: '@(ViewBag.contractId)' }, 
      //dataType: "image/jpeg;base64", 
      success: function (data) { 
       console.log(data); 
       $('#scanImage').attr('src', 'data:image/jpeg;base64,' + data.myImage); 
       $("#imageName").val('@(ViewBag.image)'); 
       imageIndex++; 
      }, 
      error: function() { 
       console.log("got error"); 
      } 
     }); 
    } 
}); 
+0

私はそれを削除しました。私は今、 ''@(ViewBag。エラー文字リテラルに文字が多すぎる ' – dmikester1

+0

ええと、これはおそらくC#が一重引用符を使用していることに腹を立てている可能性が高いです。私はこれを深く見てみましょう、私はもともと考えていたより少し難しいでしょう。 – Santi

+0

@ dmikester1私の編集を見て、これが動作すれば教えてください。 – Santi

0

うーん、私はあなたがここにそれが間違って取得していると思う:

imageName: '@(ViewBag.images[imageIndex])' 

試してみてください。imageName: '@(ViewBag.images[' + imageIndex + '])'

も、なぜあなたは二度の変数を宣言しているの?

<script type="text/javascript"> 
     var imageIndex = 0; //this 
     $(document).ready(function() { 
      var imageIndex = 0; //and this? 
.... 
関連する問題