我正在尝试访问全局javascript变量,以便将其作为数据的一部分传递给我的ajax函数。由于imageIndex
在当前上下文中不存在而在如何做到这一点上苦苦挣扎。
使用Javascript:
<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 :(得分:4)
问题
1。从顶部删除您的imageIndex
初始化之一。对于所有意图和目的,我会说在你的情况下哪一个并不重要。
2。 imageIndex
作为字符串包含在imageName
中,而不是变量的值。
棘手的部分
Razor不会让我们像通常那样简单地连接变量:
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");
}
});
}
});
答案 1 :(得分: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?
....