图片标签获胜't接受src

Image tag won't accept src

本文关键字:接受 src 标签 获胜      更新时间:2023-09-26

在使用JavaScript创建图像标记(和相关单选按钮)后,我正试图使图像以中的值作为源。我从测试和警报输出中发现了以下内容:

  • 如果image src是在创建image标签时使用精确的文件路径提供的,它将正确显示图像(例如src="images/0.jpg")。然而,这没有帮助,因为我需要它来处理任何给定的图像,而不是特定的图像。

  • 如果在使用包含文件路径的变量创建图像标记时提供图像src,则它根本无法生成图像标记或单选按钮(例如src="+result+'")。

注意:下面的代码中没有最后一个示例。结果是通过将"$.post"部分移动到for循环中"out+="行正下方的行中找到的。

  • 如果在创建图像标记时,图像src为空,则会创建图像标记和单选按钮,尽管图像如预期的那样为空。如果之后我尝试使用"getElementByID(imgID).src"来更改图像源,它将无法执行任何操作。(这里的'imgID'只是一个例子,而不是代码所说的)

除此之外,使用警报和将信息转储到div表明comicID被正确发布,并且图像src的文件路径肯定被找到,并且被正确复制到变量"result"中,甚至在创建标记或尝试使用"getElementById"编辑标记之前一行。

在这一点上,我被难住了,我不知道是什么从逻辑上阻止了src的读取。

--

Javascript:

<script>
// Loads the user's comic list from the database.
        function loadComic()
        {
        var xmlhttp = new XMLHttpRequest();
        var getID = '<?php echo $_SESSION["userID"]; ?>';
        var url = "loadCom.php?userID="+getID;

        xmlhttp.onreadystatechange=function()
        {
            if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
            {
                loadComicJSON(xmlhttp.responseText);
            }
        }
        xmlhttp.open("GET", url, true);
        xmlhttp.send();
        }
        // JSON parsing for 'loadComic'.
        function loadComicJSON(response)
        {
            var arr = JSON.parse(response);
            var i;
            var out = "";
            document.getElementById("loadList").innerHTML="";
            if (arr.length == 0)
            {
                //Irrelevant manipulation of HTML.
            }
            else
            {   
                out+="<br>";
                for(i = 0; i < arr.length; i++)
                {
                    out += "<hr><br><img name = '" + ('cm' + arr[i].comicID) + "' id='" + ('com' + arr[i].comicID) + "' onclick='resizeThumb(this)' height='100px;' src='' ><input name='comicList' type='radio' id='" + arr[i].comicID + "' value='" + arr[i].comicID + "'>" + arr[i].comicName + " </option><br><br>";                        
                }

                document.getElementById("loadList").innerHTML=out;
                for(j=0; j< arr.length; j++)
                {
                    tempID = (arr[j].comicID);
                    $.post("getCover.php", {comicID:tempID}, function(result)
                    {
                        document.getElementById("loadList").innerHTML+="<p>"+result+"</p>";
                        document.getElementById("com"+arr[j].comicID).src = result;
                    }
                    );
                }
            }
        }
    </script>

PHP(getCover.PHP):

<?php
if (isset($_POST["comicID"]))
{
    include_once('includes/conn.inc.php');
    $checkID = $_POST["comicID"];
    $query = ("SELECT pageLocation FROM page WHERE comicID = '$checkID' ORDER BY pageNum");
    $result = mysqli_query($conn, $query);
    $row = mysqli_fetch_assoc($result);
    print_r($row["pageLocation"]);
}
else
{   
    $checkID = null;
    echo "Error. No comic found.";
}
?>

据我所知,loadList.php运行得很好,所以我没有列出它的代码来保持相关性。

我复制了你的代码并对它进行了一些调整,这样我就可以在没有web服务的情况下运行它,而且它运行得很好。这是我创建的HTML页面:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
<script>
    // JSON parsing for 'loadComic'.
    function loadComicJSON()
    {
        var arr = [{comicID: 1},{comicID: 2},{comicID: 3}];
        var result = "monkey.jpeg";
        var i;
        var out = "";
        document.getElementById("loadList").innerHTML="";
        if (arr.length == 0)
        {
            //Irrelevant manipulation of HTML.
        }
        else
        {
            out+="<br>";
            for(i = 0; i < arr.length; i++)
            {
                out += "<hr><br><img name = '" + ('cm' + arr[i].comicID) + "' id='" + ('com' + arr[i].comicID) + "' onclick='resizeThumb(this)' height='100px;' src='' ><input name='comicList' type='radio' id='" + arr[i].comicID + "' value='" + arr[i].comicID + "'>" + arr[i].comicName + " </option><br><br>";
            }

            document.getElementById("loadList").innerHTML=out;
            for(j=0; j< arr.length; j++)
            {
                var imgSrc;
                tempID = (arr[j].comicID);
                document.getElementById("loadList").innerHTML+="<p>"+result+"</p>";
                document.getElementById("com"+arr[j].comicID).src = result;
            }
        }
    }
</script>
</head>
<body>
<div id="loadList"></div>
<button onclick="loadComicJSON()">Try it</button>
</body>
</html>

正如您所看到的,我创建了一个JSON对象数组,其中包含comicID,并静态地将图像创建为"monkey.jpeg"。

代码正常工作,因此您传递到loadComicJSON方法的"响应"或POST方法的结果存在问题。

添加几个console.log语句,查看我提到的两个值,您可能会发现问题。

自己解决了这个问题。事实证明,$.post需要是$.get,并且从技术上讲,它需要在循环之外(即在其自身的功能中)才能正常工作。经过几次小调整后,现在效果很好。