我知道以前曾经问过这个问题,但是我已经查看了我之前发现的所有帖子,但仍然无法使其发挥作用。希望问题很简单,你们可以帮我解决。
我无法从PHP脚本中获取一个数组,我将json_encoded返回到Javascript数组中。如果我删除了dataType应该是json的条件,那么success函数会抱怨意外的数据。
我有一个Javascript函数,它使用POST方法调用PHP脚本。在PHP脚本中,我将一些调试消息写入日志文件并显示json_encoded数组的内容。当我使用JSONLint检查时,内容符合JSON,但我的javascript函数总是出错。
PHP函数如下所示:
<?php
// Include the php logger class so that we can write log messages to a log file
require_once('/myscripts/phplogger.php');
// Set up php log file
$log = new Logging();
$log->lfile('/mylogfiles/php-debug.log');
// Log status
$log->lwrite('Starting debug');
// ...
// (there's some more stuff here to get the data from a MySQL database)
// ...
// The following line when read in the log file shows a valid JSON array
$log->lwrite('array '.json_encode($dataVnvMethods));
$json_dataVnvMethods = json_encode($dataVnvMethods);
$log->lwrite('Ending debug');
?>
Javascript函数如下所示:
function jsgetvnvfilters(projid,repid,weekid)
{
$.ajax(
{
url: './getvnvfilter.php',
data: {'projid':projid, 'weekid':weekid, 'repid':repid},
type: 'post',
dataType: 'json',
success: function()
{
alert('success');
var prevnvlist = '<?php echo $json_dataVnvMethods ?>';
var vnvlist = JSON.parse(prevnvlist);
for (var x = 1; x <= vnvlist.length; x++) {
var vnv = vnvlist[x]['VnVMethod'];
vnvSel.options[vnvSel.options.length] = new Option(vnv, vnv);
}
},
error: function()
{
alert('failure');
}
}
);
}
答案 0 :(得分:5)
你误解了javascript和php是如何相关的; php将仅在页面加载时呈现一次,因此您无法echo
在javascript success
处理程序中返回的php数据。
相反,您的php脚本输出的所有内容都将在javascript变量中提供:
success: function(vnvlist) {
// ^^^^^^^ this is what has been outputted by php, the
// json already parsed
// your data is available in `vnvlist`
// var prevnvlist = '<?php echo $json_dataVnvMethods ?>';
// with dataType='json' you don't need to parse anything
// as jQuery will parse it for you
// var vnvlist = JSON.parse(prevnvlist);
// so all you need is this...
alert('success');
for (var x = 1; x <= vnvlist.length; x++) {
var vnv = vnvlist[x]['VnVMethod'];
vnvSel.options[vnvSel.options.length] = new Option(vnv, vnv);
}
},
你需要确保php只输出你的json字符串:
...
// The following line when read in the log file shows a valid JSON array
$log->lwrite('array '.json_encode($dataVnvMethods));
// output your data so that it is available on the client-side
echo json_encode($dataVnvMethods);
$log->lwrite('Ending debug');
...
答案 1 :(得分:0)
按f12并打开开发人员工具。转到部分网络。然后试试。如果您收到404错误,则表示您输入了错误的URI或其他内容。基本上,如果Ajax返回错误,则意味着您由于某种原因没有访问您的脚本。也许您输入了错误的URI,或者您没有权限。
答案 2 :(得分:0)
使用数据:JSON.stringify(value [,replacer [,space]])