这可能是非常简单的事情,我只是让它变得更加艰难。我有一个php页面,它只有一个复选框和一个按钮。当我点击按钮时,它应该调用我的“collection.php”页面,然后在状态上更新我的索引页面。我在collection.php中取出了大部分代码,我的索引页面仍然没有更新。我究竟做错了什么??提前谢谢!
的index.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>
collection.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);
}
答案 0 :(得分:1)
也许是一个想法,但可能在评论之外更好地讨论:
您是否知道$dir = "/video/Movies/";
将在根目录中打开目录?而不是您的collection.php所在路径的子目录。因此(在普通的Web服务器上)我希望您的脚本无权打开该目录;因此不会继续在你的剧本中继续。
答案 1 :(得分:0)
您的数据属性似乎有误。
应该是这样的;
data: {update:update},
答案 2 :(得分: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 );
});
答案 3 :(得分:0)
如果您希望收到JSON,那么您需要发送有效的JSON。
在while循环中回显一系列单独的JSON字符串,就像你正在做的那样,从客户的角度来看会产生无效的JSON。
如果你使用循环来构建一个响应对象,你应该只在循环中构建对象/数组,然后在构建对象/数组之后json_encode()
整个事件并输出响应。
答案 4 :(得分: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
}
至少应该让你知道什么是失败的...祝你好运。 :)