Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Jquery和PHP从.ajaxHTTP请求中检索数据?_Php_Jquery_Ajax_Json - Fatal编程技术网

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

如何使用Jquery和PHP从.ajaxHTTP请求中检索数据?,php,jquery,ajax,json,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({

我需要从一个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>');
                    });
               })
         });
    });
});
$(文档).ready(函数(){
$(“#指标”)。更改(函数(){
$('国家').fadeIn('缓慢');
var indi_val=$(this.val();
var countries=$.ajax({
url:'scripts/chart_handler.php',
数据类型:“json”,
键入:“POST”,
数据:{'indicator':indic_val},
async:false,
成功:(功能(数据){
控制台日志(数据);
$。每个(数据、功能(i、键){
$(“#国家”)。追加(“”+key+“”);
});
})
});
});
});
我进入了成功标签,但返回的数据为空。
我必须使用什么来获取数据数组?

您可以尝试使用getJSON

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

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

  });
});
$.getJSON('scripts/chart\u handler.php'))
.完成(功能(数据){
$。每个(数据、功能(i、项){
$(“#国家”)。附加(“”+项目+“”);
});
});
I如果您在查询中使用FECH ASSOC,则需要使用item.namefield,其中namefield是您只希望替代item的字段名称

您可以使用firebug(firefox扩展)来调试和查看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>');

  });
});
$.getJSON('scripts/chart_handler.php',{indicator:indic_val})
.完成(功能(数据){
$。每个(数据、功能(i、项){
$(“#国家”)。附加(“”+项目+“”);
});
});

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

尝试将您的文档转换为不带BOM的UTF8,然后再试一次

有关更多信息,请参阅SO上的另一个线程:

使用以下代码

$('#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(){}
        });            
    }); 
$('#ddlCountry')。更改(函数(){
$.ajax({
类型:'POST',
url:'admin_in_action/GetDivisionByCountry.php',
数据类型:'json',
数据:{countryId:this.value},
cache:false,
成功:功能(结果){
$('#ddlddivision').get(0).options.length=0;
$('#ddlddivision').get(0).options[0]=新选项(“--Select--”和“0”);
$.map(结果、功能(项目){
$('#ddlddivision').get(0).options[$('#ddlddivision').get(0).options.length]=新选项(item.division名称,item.DivisionID);
});                
},
错误:函数(){}
});            
}); 

我的问题的答案只是在PHP脚本中更改“returning或ending”行。 这是由于对AJAX的误解

更改:

返回json_encode($array)

用于:

echo json_编码($array)


您是否使用Firebug或类似工具查看您是否从Ajax请求中得到了预期的结果?如果
控制台.log(data)
返回空值,那么首先检查您的php脚本是否发送了有效的json。也发布您的php代码。如果数据未发送,是否最好包含发送数据的函数,而不是接收它的人?试试这个:var data=$.parseJSON(data);似乎OP需要执行POST请求。它仍然执行GET请求,而不是问题中的POST请求。@Heberfa:当然,但该数据在请求中表示为查询字符串参数,而不是POST数据。