0

这可能是非常简单的事情,我只是让它变得比它必须的更困难。我有一个 php 页面,它只有一个复选框和一个按钮。当我单击按钮时,它应该调用我的“collection.php”页面,然后更新我的索引页面的状态。我在 collection.php 中取出了大部分代码,但我的索引页面仍然没有更新。我究竟做错了什么??提前致谢!

索引.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en-gb" xml:lang="en-gb">
  <head>
    <meta content="text/html;charset=utf-8" http-equiv="Content-Type">
    <meta content="utf-8" http-equiv="encoding">
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
    <script type="text/javascript" language="javascript">
        $(document).ready(function() {
            // Click trigger for image
            $("#myBtn").click(function() {
                if ($('#update').is(":checked"))
                    var update = 'on';
                else
                    var update = 'off';

                $.ajax({
                    url: 'collection.php',
                    type:'POST',
                    dataType: 'json',
                    data: 'update='+update,
                    cache: false,
                    async: false,
                    success: function(output_string){
                            //alert(JSON.stringify(output_string));
                            $('#collection_status').html(''); // Clear #wines div
                            $('#collection_status').append(output_string.worked + '<br/>');
                    }, // End of success function of ajax form
                    error: function() {
                        alert("there is an issue with the collection!");
                    }
                }); // End of ajax call
                return false; // keeps the page from not refreshing 
            });
        });
    </script>
</head>
<body style="background-color:#333333;color:white;font-family:verdana;text-transform:lowercase;">
    <form>
        <input type="checkbox" id="update" /> Update Existing<br />
        <button id="myBtn">Collect</button>
    </form>
<br />
<div id="collection_status"></div>
</body>
</html>

集合.php

<?
// movie search variables
$dir = "/video/Movies/";
$movie_extensions = array('mkv','mp4','m4v','avi');
$update_movies = 0;

if(isset($_POST["update"]))
    $update_movies = $_POST["update"];

// read contents from $dir
if (is_dir($dir)){
    if ($dh = opendir($dir)){
        while (($file = readdir($dh)) !== false){
            $file_info = pathinfo($file);
            $output_string['worked'] = 'found <span style="color:yellowgreen;">' . $file . '</span><br />';
            echo json_encode($output_string);
        }
        closedir($dh);
    }
}

当我从收集脚本中删除回声部分时,我收到一个响应(下面的作品):

$output_string['worked'] = 'testing';
echo json_encode($output_string);

一旦我将其添加回循环中,它就会出错。

作为测试,我在其中添加了一个 for 循环 - 它也失败了:

for($i=0;$i<10;$i++)
{
    $output_string['worked'] = 'found <span style="color:yellowgreen;">' . $file . '</span><br />';
    echo json_encode($output_string);
}
4

5 回答 5

1

也许是一个侧面的想法,但可能在评论之外更好地讨论:

你知道这$dir = "/video/Movies/";将在根目录中打开目录吗?而不是您的 collection.php 所在路径的子目录。因此(在普通网络服务器上)我希望您的脚本甚至无权打开该目录;因此不会在您的脚本中继续进行。

于 2013-08-16T15:49:56.173 回答
0

您的数据属性似乎是错误的。

应该是这样的;

data: {update:update},
于 2013-08-16T14:39:19.433 回答
0

你应该改变数据线。

 dataType: 'json',  
 data: {update:update},
 cache: false,  

来自http://api.jquery.com/jQuery.ajax/的示例
将一些数据保存到服务器并在完成后通知用户。

$.ajax({  
  type: "POST",  
  url: "some.php",  
  data: { name: "John", location: "Boston" }  
}).done(function( msg ) {  
  alert( "Data Saved: " + msg );  
});
于 2013-08-16T14:49:49.180 回答
0

如果您希望收到 JSON,那么您需要发送有效的 JSON。

从客户端的角度来看,在 while 循环中回显一系列单独的 JSON 字符串会产生无效的 JSON。

如果您使用循环来构建响应对象,您应该只在循环中构建对象/数组,然后在对象/数组构建json_encode()完成整个事物并输出响应之后。

于 2013-08-16T15:56:32.437 回答
0

因此,问题似乎是您有两个条件包装了响应输出,并且您没有正确解释该失败:

// read contents from $dir
if (is_dir($dir)){  <-- ***THIS MIGHT BE FAILING***
    if ($dh = opendir($dir)){ <-- ***THIS MIGHT BE FAILING***
        while (($file = readdir($dh)) !== false){ <-- ***THIS MIGHT BE FAILING***
            $file_info = pathinfo($file);
            $output_string['worked'] = 'found <span style="color:yellowgreen;">' . $file . '</span><br />';
            echo json_encode($output_string);
        }
        closedir($dh);
    }
}

因此,您只需要考虑这些条件中的虚假结果:

// read contents from $dir
if (is_dir($dir)){  <-- ***THIS MIGHT BE FAILING***
    if ($dh = opendir($dir)){ <-- ***THIS MIGHT BE FAILING***
        while (($file = readdir($dh)) !== false){ <-- ***THIS MIGHT BE FAILING***
            $file_info = pathinfo($file);
            $output_string['worked'] = 'found <span style="color:yellowgreen;">' . $file . '</span><br />';
            echo json_encode($output_string);
        }
        closedir($dh);
    } else {
      exit(json_encode(array('status' => 'Cannot open the $dir'))); <-- EXIT WITH FAIL
    }
} else {
  exit(json_encode(array('status' => '$dir is not a dir'))); <-- EXIT WITH FAIL
}

这至少应该让您了解失败的原因......祝您好运。:)

于 2013-08-16T15:57:08.520 回答