jquery中的初始.ajax调用:
$.ajax({
type: 'post',
url: 'items_data.php',
data: "id="+id,
dataType: 'json',
success: function(data){
if(data){
make_item_rows(data);
}else{
alert("oops nothing happened :(");
}
}
});
将一个简单的字符串发送到php文件,如下所示:
header('Content-type: application/json');
require_once('db.php');
if( isset($_POST['id'])){
$id = $_POST['id'];
}else{
echo "Danger Will Robinson Danger!";
}
$items_data = $pdo_db->query ("SELECT blah blah blah with $id...");
$result_array = $items_data->fetchAll();
echo json_encode($result_array);
我正好抓住$ result_array并将其传递给另一个函数。我仔细检查确实返回了正确的值,因为我可以将结果回显到我的页面,它显示如下内容:
[{"item_id":"230","0":"230","other_id":"700"},{"item_id":"231","0":"231","other_id":"701"},{"item_id":"232","0":"232","other_id":"702"}]
我无法弄清楚如何迭代结果,因此我可以将值注入到HTML中的表中。以下是我的功能:
function make_item_rows(result_array){
var string_buffer = "";
$.each(jQuery.parseJSON(result_array), function(index, value){
string_buffer += value.item_id; //adding many more eventually
$(string_buffer).appendTo('#items_container');
string_buffer = ""; //reset buffer after writing
});
}
我还尝试在$ .each函数中发出一个警告,以确保它发射了3次,就是这样。但是,我的代码中没有数据。尝试过其他一些方法也没有运气。
更新:我更改了我的代码以包含parseJSON,没有骰子。我的jquery文件中出现意外的令牌错误(当它尝试使用本机json解析器时)。尝试添加json标头无效,同样的错误。 jquery版本1.9.1。现在的代码应该反映在上面。
答案 0 :(得分:10)
在ajax调用中设置dataType:"JSON"
和回调。
例如:
$.ajax({
url: "yourphp.php?id="+yourid,
dataType: "JSON",
success: function(json){
//here inside json variable you've the json returned by your PHP
for(var i=0;i<json.length;i++){
$('#items_container').append(json[i].item_id)
}
}
})
还请在PHP集中考虑JSON内容类型。 header('Content-type: application/json');
答案 1 :(得分:1)
您需要使用jQuery.parseJSON
function make_item_rows(result_array){
var string_buffer = "";
$.each(jQuery.parseJSON(result_array), function(index, value){
string_buffer = value.item_id;
$(string_buffer).appendTo('#items_container');
});
}
答案 2 :(得分:1)
function make_item_rows(result_array){
var string_buffer = "";
var parsed_array=JSON.parse(result_array);
$.each(parsed_array, function(){
string_buffer += parsed_array.item_id;
$(string_buffer).appendTo('#items_container');
string_buffer = "";
});
}
答案 3 :(得分:0)
试试这个。
function make_item_rows(result_array){
var string_buffer = "";
$.each(result_array, function(index, value){
value = jQuery.parseJSON(value);
string_buffer += value.item_id;
$(string_buffer).appendTo('#items_container');
string_buffer = "";
});
}
答案 4 :(得分:0)
假设您已经解析了json响应,并且您拥有该数组。我认为问题是你需要将一个回调传递给$ .each,它接受和索引以及一个元素参数
function make_item_rows(result_array){
$.each(result_array, function(index, element){
document.getElementById("a").innerHTML+=element.item_id;
});
}
答案 5 :(得分:0)
对于$.each
中的初学者,您需要访问result_array
中包含的对象实例的属性,而不是result_array
本身。
var string_buffer = "";
$.each(result_array, function(index, object){
/* instance is "object"*/
alert( object.item_id);
});
不完全确定您对此行的期望:$(string_buffer).appendTo('#items_container');
$(string_buffer)
不会创建有效的jQuery选择器,因为string_buffer
中的任何内容都没有类,标记名或ID的前缀,而json中的值也没有
如果只想要附加item_id
的字符串值:
$('#items_container').append( object.item_id+'<br/>');
如果你使用jQuery AJAX方法接收这个,你不需要像其他答案所说的那样使用$.parseJSON
,只要你为AJAX设置正确的dataType,它就已经在你内部完成了