0

XHR ファイルを HTML ドキュメントに直接埋め込むと、すべて正常に動作します。経由でsrcするとすぐに <script type="text/javascript" src="js/ajax_gallery.js">ajax_json_gallery('gallery');</script>

何も機能せず、エラーも発生しません。XHR が HTML とは別のファイルで作成されていることに関係していると思います。XHR スクリプトが HTML を乱雑にするのは好きではありません。外部の JS ファイルとしてロードしたいだけです。

簡単にするために、メインの 3 つのスクリプト galleryHandle.php、XHR.js、ajax_gallery.html をすべて同じディレクトリ レベルに移動しました。また、ギャラリーの画像は同じレベルの「gallery」というフォルダにあります。

これが私のコードです: HTML

<html>
<head>
    <title>Test</title>
    <link rel="stylesheet" type="text/css" href="css/gallery.css" />
</head>
<body>
    <div id="pagetop"></div>
    <div id="thumbnailbox"></div>
    <div id="pictureframe"></div>   
    <script type="text/javascript" src="XHR.js">ajax_json_gallery('gallery');</script>
</body>
</html>

JavaScript

function ajax_json_gallery(folder) {
        "use strict";
        var httpRequest = new XMLHttpRequest();
        document.getElementById("pagetop").innerHTML = "dynamic ajax json gallery";
        var thumbnailbox = document.getElementById("thumbnailbox");
        httpRequest.open("POST", "galleryHandle.php", true);
        httpRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        httpRequest.onreadystatechange = function() {
            if (httpRequest.readyState === 4 && httpRequest.status === 200) {
                var data = JSON.parse(httpRequest.responseText);
                var pictureframe;
                pictureframe.innerHTML = "<img src='"+data.img1.src+"'>";
                thumbnailbox.innerHTML = "";
                for (var obj in data) {
                    if (data[obj].src){
                        thumbnailbox.innerHTML += '<div onclick="putinframe(\''+data[obj].src+'\')"><img src="'+data[obj].src+'"></div>';
                    }
                }
            }
        };
        httpRequest.send("folder="+folder); 
        thumbnailbox.innerHTML = "Loading...";
}
    function putinframe(src) {
        "use strict";
        var pictureframe = document.getElementById("pictureframe");
        pictureframe.innerHTML = '<img src = " '+src+' " >';
        }

PHP

<?php
header("Content-Type: application/json");
//bring in folder name
$folder = $_POST["folder"];
//start componding json 
$jsonData = '{';
//compound directory path
$dir = $folder."/";
//open directory
$dirHandle = opendir($dir);
//init while looop 
$i = 0;
while ($file = readdir($dirHandle)) {
    if(!is_dir($file) && strpos($file, '.jpg')){
        $i++;
        $src = "$dir$file";
$jsonData .= '"img'.$i.'":{ "num":"'.$i.'","src":"'.$src.'", "name":"'.$file.'" },';
    }
}
closedir($dirHandle);
$jsonData = chop($jsonData, ",");
$jsonData .= '}';
echo $jsonData;
?>

コードに冗長性があることは理解していますが、これは、POST、XHR を使用した JSON 構築の基本を学習するためのチュートリアルにすぎません。

とにかく、いつものように感謝します。ありがとう

4

2 に答える 2

1

説明

W3Cから:

<script type="text/javascript" src="myscript.js">
  alert('I am pointless as I won\'t be executed');
</script>

ページでこの要素に遭遇すると、ブラウザはファイル myscript.js をロードして実行します。src 属性を指定すると、script 要素自体の内容はすべてスキップされます。[最後の] 例では、ファイル myscript.js をロードしてその中のコードを実行しますが、script 要素内のアラートはまったく実行しません。


解決

headタグで次のことを試してください。

HTML

<script type="text/javascript" src="XHR.js"></script>
<script type="text/javascript">
    ajax_json_gallery('gallery');
</script>
于 2013-07-03T12:40:05.373 に答える
1

<script type="text/javascript" src="XHR.js">

1 つのタグに src 属性と javascript の両方を含めることはできません。それらを分離します。このような...

<script type="text/javascript" src="XHR.js"></script>

<script type="text/javascript">ajax_json_gallery('gallery');</script>
于 2013-07-03T12:40:20.413 に答える