4

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。现在的代码应该反映在上面。

4

6 回答 6

12

在您的 ajax 调用中设置dataType:"JSON"and 回调。

例如:

$.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');

于 2013-03-31T20:19:20.930 回答
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');
 });                    
}
于 2013-03-31T20:14:05.170 回答
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 = "";           
    });                    
}
于 2013-03-31T20:16:22.180 回答
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 = "";           
 });                    
}
于 2013-03-31T20:12:16.703 回答
0

假设您已经解析了 json 响应并且您拥有数组。我认为问题是您需要将回调传递给 $.each ,它需要和索引和元素参数

function make_item_rows(result_array){  
    $.each(result_array, function(index, element){
        document.getElementById("a").innerHTML+=element.item_id;
    });                    
}

(稍作修改)DEMO

于 2013-03-31T20:20:13.220 回答
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,它就会在内部为您完成

于 2013-03-31T20:20:15.557 回答