2012-03-30 98 views
1

更新:根据这里的建议,我修改了我的代码。为了解决这个问题,我只是试图用JSON提醒PHP数组。仍然无法让它工作。下面的代码驻留在相同的test.php页面上。如果更新,警报是否应该启动?该功能似乎也失败了。测试警报不起作用。如何将PHP数组转换为JSON数组?

<?php 
    header('Content-type: application/json'); 
    $arr = array ('item1'=>"test1",'item2'=>"test2",'item3'=>"test3"); 
    echo json_encode($arr); 
?> 

<script type="text/javascript"> 
    $(function() { 
    $.getJSON('test.php',function(data) { 
     alert("TEST"); 

     $.each(data, function(key, item) { 
     alert(key + item); }); 
     }); 
    }); 
    }); 
</script> 

我是JSON的新手,试图让PHP数组显示在HTML文件中。下面是一个简单的例子。请告诉我,如果这应该工作,我做错了什么。我试图输出这个数组中的键。谢谢。

我的PHP脚本(test.php的):

 $arr = array ('item1'=>"test1",'item2'=>"test2",'item3'=>"test3"); 
json_encode($arr); 

$content = file_get_contents('test.htm'); 
echo $content; 

我的HTML页面(TEST.HTM):

<script type="text/javascript"> 

    $(function() { 
$.getJSON('test.php',function(data) { 
    $.each(data,function(i, item) { 
    alert(item.key); 
     }); 
    }); 
}); 

</script> 
+0

JSON是像这样' “键”: “值”''没有 “钥匙”=> “值”' – 2012-03-30 13:41:04

+0

如果你把test.php的文件的内容,那不会产生你的JavaScript期望的json。 – 2012-03-30 13:42:43

+0

没有,这不会工作。 – Kristian 2012-03-30 13:43:44

回答

1

确保你已经在你的HTML文件中包含了jQuery。

由于您只提醒密钥,因此您不必等待dom-ready事件 - 即使您想要,我也会首先获取JSON并将$(function...放入ajax回调函数中。

你的JSON编码的PHP阵列应该是这样的:

{"item1":"test1","item2":"test2","item3":"test3"} 

入住这个在调试器,或者直接在浏览器加载test.php的。正如其他人所建议的,您的PHP代码file_get_contents有点奇怪。

最后,你的对象遍历不起作用。看docs:在JavaScript

$.each(data, function(key, item) { 
    alert(key + item); 
}); 

字符串连接符为+,而不是.在PHP。 item.key会尝试访问您的某件物品的key属性 - 没有任何物品属于您的物品。

2

这是到足够多:

header('Content-type: application/json'); 
$arr = array ('item1'=>"test1",'item2'=>"test2",'item3'=>"test3"); 
echo json_encode($arr); 
exit; 

那么你的$ .getJSON将获取数据。

1

为什么你要调用php页面的文件的file_get_content()?

你不应该显示它,但你应该改为显示您的JSON数据:

$arr = array ('item1'=>"test1",'item2'=>"test2",'item3'=>"test3"); 
$content = json_encode($arr); 

echo $content; 
1

没有那就没办法了。

首先,让你的PHP呼应你的数组:

$arr = array('item1'=>"test1", 'item2'=>"test2", 'item3'=>"test3"); 
echo json_encode($arr); 

然后调用你的JavaScript的AJAX功能,并观察响应

<script type="text/javascript"> 
    $(function() { 
$.getJSON('test.php',function(data) { 
    $.each(data,function(i, item) { 
    alert(item.key); 
     }); 
    }); 
}); 
</script> 
1

这是因为你并不需要做的最后一部分在PHP中,你可以拨打file_get_contents

在你的PHP,你可以做

$arr = array ('item1'=>"test1",'item2'=>"test2",'item3'=>"test3"); 
echo json_encode($arr); 
在Javascript

,你会得到一个Javascript对象,并且可以方便地通过按键来迭代是

for(var key in data) 
{ 
    alert(key + ' => ' + data[key]); 
} 
1

的问题是你的PHP脚本

json_encode($ ARR);

没有做任何事情,世界上没有输出或可变

节约的,什么是你从TEST.HTM得到些什么?你不能把两种不同内容的JSON要由$ .getJSON后来解析,你的PHP脚本应该只输出JSON编码

尝试这样做对你的PHP代码:

 $arr = array ('item1'=>"test1",'item2'=>"test2",'item3'=>"test3"); 
    echo json_encode($arr); 

并在你的JavaScript代码只是为了检查之前:

<script type="text/javascript"> 
    $(function() { 
$.get("test.php",function(data){ 
    var obj = $.parseJSON(data); 
    alert("Test 1: " + obj.test1); 
}); 
</script> 
+0

基于这里的建议,我把所有的代码放在一个页面(test.php)并运行它。仍然没有警报。 jQuery也被调用。 – stevenpepe 2012-03-30 14:56:26

+0

你把你的test.php发送给我的东西吗?从test.php中删除所有内容,并把我发给你的答案放在正确的位置。并告诉我你有什么输出。如果你已经这样做了。通常通过网络浏览器访问您的test.php并复制您访问它时显示的输出。 – Grego 2012-03-30 15:51:26

+0

输出是数组回声:{“item1”:“test1”,“item2”:“test2”,“item3”:“test3”} – stevenpepe 2012-03-30 15:54:33

0

对于那些谁仍然不敌:

我所用“$。员额”发送一些数据和检索信息。当使用它时,我的JSON返回就像一个字符串。

解决方法:使用 第4个参数的dataTypeJSON

(相应于http://api.jquery.com/jQuery.post/)。

例如:

$.post('http://SOMEWHERE.COM/A/B/C', 
    { 
    parameter:value 
    }, 
    function (data) { 
    // success 
    }, 
    'json' 
);