如何使用Jquery和PHP从.ajax HTTP请求中检索数据?

时间:2013-04-17 14:19:53

标签: php jquery ajax json

我需要从PHP文件中检索一个数组,这是一个以数组形式返回的SQL查询。 我用json_encode();对其进行了编码并将其返回。

这是我的JS文件:

$(document).ready(function() {
$('#indicators').change(function() {
    $('#countries').fadeIn('slow');
    var indic_val = $(this).val();
    var countries = $.ajax({
        url: 'scripts/chart_handler.php',
        dataType: "json",
        type: 'POST',
        data: {'indicator' : indic_val},
        async:false,
        success: (function ( data ){
            console.log(data);
            $.each(data, function(i,key) {
                $('#countries').append('<option value="'+ key +'">'+ key +'</option>');
                    });
               })
         });
    });
});

我获得内部成功标记,但数据返回null。 我需要使用什么来获取数据数组?

4 个答案:

答案 0 :(得分:1)

我的问题的答案只是在PHP脚本中更改“返回或结束”行。 这是因为对AJAX的误解。

更改:

  

返回json_encode($ array);

for:

  

echo json_encode($ array);

答案 1 :(得分:0)

您可以尝试使用getJSON

$.getJSON('scripts/chart_handler.php')
.done(function( data ) {
  $.each( data, function( i, item ) {

   $('#countries').append('<option value="'+ item +'">'+ item +'</option>');

  });
});

如果您在查询中使用FECH ASSOC,则需要使用item.namefield,其中namefield是您想要仅输入项目的字段的名称

您可以使用firebug(firefox extencion)来调试并查看项目dom extruture

如果你想通过get方法发送一些东西,请按以下方式执行

$.getJSON('scripts/chart_handler.php',{indicator : indic_val})
.done(function( data ) {
  $.each( data, function( i, item ) {

   $('#countries').append('<option value="'+ item +'">'+ item +'</option>');

  });
});

答案 2 :(得分:0)

我认为这可能是由UTF8-BOM(字节顺序标记)引起的。 BOM将添加到json字符串的开头,这将使其无效。

尝试将您的文档转换为没有BOM的UTF8并再给它一次。

有关详细信息,请参阅SO上的其他帖子:json_decode returns NULL after webservice call

答案 3 :(得分:0)

使用以下代码

$('#ddlCountry').change(function(){

        $.ajax({                
            type:'POST',
            url:'<?php echo base_url(); ?>admin_in_action/GetDivisionByCountry.php',
            datatype:'json',
            data:{countryId:this.value},
            cache:false,
            success:function(result){
                $('#ddlDivision').get(0).options.length = 0;
                $('#ddlDivision').get(0).options[0] = new Option("--Select--", "0");

                $.map(result, function(item){
                    $('#ddlDivision').get(0).options[$('#ddlDivision').get(0).options.length] = new Option(item.DivisionName, item.DivisionID);
                });                

            },
            error:function(){}
        });            
    });