Javascript 没有收到对PHP的AJAX调用的响应(使用JSON数据)

Javascript 没有收到对PHP的AJAX调用的响应(使用JSON数据),javascript,php,jquery,json,ajax,Javascript,Php,Jquery,Json,Ajax,我在服务器上运行一个PHP,我通过jQuery.Ajax()调用它,但它总是返回到它的错误部分 如果我直接从浏览器调用PHP地址,我会得到所需的响应,它只会在jQuery调用中中断 PHP(简单地说)是这样的: 在javascript方面,我这样调用它: <html> <head> <script type="text/javascript"> function loadcall(data) {

我在服务器上运行一个PHP,我通过
jQuery.Ajax()
调用它,但它总是返回到它的错误部分

如果我直接从浏览器调用PHP地址,我会得到所需的响应,它只会在jQuery调用中中断

PHP(简单地说)是这样的:


在javascript方面,我这样调用它:

<html>
<head>
    <script type="text/javascript">
            function loadcall(data)
            {
                jQuery.ajax({
                    async:false,
                    method:'POST',
                    crossDomain:true,
                    dataType:'jsonp',
                    url:'http://example.com/ajax.php?getcodenode',
                    data:{'arg':data},
                    success:function(result){
                        var ret=JSON.parse(result);
                        var el=jQuery('#abc');
                        for(en in ret.itens)
                        {
                            el.Append('<div id="item_'+en.id+'">'+en.lb+', '+en.ds+'</div>');
                        }
                    },
                    error:function(result){alert('Error (loadcall)');}
                });
            }
    </script>
</head>
<body>
    <div id="abc"></div>
</body>
</html>

函数装入调用(数据)
{
jQuery.ajax({
async:false,
方法:'POST',
跨域:是的,
数据类型:'jsonp',
网址:'http://example.com/ajax.php?getcodenode',
数据:{'arg':数据},
成功:功能(结果){
var ret=JSON.parse(结果);
var el=jQuery(“#abc”);
适用于(英文版)
{
el.Append(''+en.lb+'',''+en.ds+'');
}
},
错误:函数(结果){alert('error(loadcall);}
});
}
您需要调用loadcall(数据)


函数装入调用(数据)
{
jQuery.ajax({
async:false,
方法:'POST',
跨域:是的,
数据类型:'jsonp',
网址:'http://example.com/ajax.php?getcodenode',
数据:{'arg':数据},
成功:功能(结果){
var ret=JSON.parse(结果);
var el=jQuery(“#abc”);
适用于(英文版)
{
el.Append(''+en.lb+'',''+en.ds+'');
}
},
错误:函数(结果){alert('error(loadcall);}
});
}
loadcall('somethingData')
如何从PHP读取JSON对象并在浏览器中显示? 您的代码上有许多注释

  • 当您已经从服务器获取json返回时;你不需要解析它。它已经是一个json对象了
  • 您可以设置async:true以获取承诺数据
  • 在对象中循环的方式需要正确执行。请参见图像“如何正确获取对象路径”
  • 您可以使用$token代替jQuery token;除非你故意需要
  • 我不确定这是否是最好的办法;但它给出了你在问题中解释的所需结果
下面对代码进行了测试,并给出了一些注释:

<script type="text/javascript">
    loadcall("test"); 
    // as pointed you need to call the function so it runs

    function loadcall(data) {
        $.ajax({
            async: true,
            method: 'POST',
            crossDomain: true,
            dataType: 'json', //your data type should be JSON not JSONP
            url: 'page.php?getcodenode',
            data: {
                'arg': data
            },
            success: function(result) {
                console.log(result); 
                 // see attached image how to get the path for object
                var ret = result;
                var el = $('#abc');
                for (en in ret.itens) {
                    console.log(ret.itens[en].ds);
                    el.append('<div id="item_' + ret.itens[en].id + 
                    '">' + ret.itens[en].lb + ', ' + ret.itens[en].ds + '</div>');
                }
            },
            error: function(result) {
                console.log(result);
            }
        });
    }
</script>

加载调用(“测试”);
//如前所述,您需要调用该函数以使其运行
函数装入调用(数据){
$.ajax({
async:true,
方法:“POST”,
跨域:是的,
dataType:'json',//您的数据类型应该是json而不是JSONP
url:'page.php?getcodenode',
数据:{
“arg”:数据
},
成功:功能(结果){
控制台日志(结果);
//请参见附件图像“如何获取对象的路径”
var-ret=结果;
var el=$('abc');
适用于(英文版){
log(ret.itens[en].ds);
el.append('+ret.itens[en].lb+','+ret.itens[en].ds+'');
}
},
错误:函数(结果){
控制台日志(结果);
}
});
}

  • 在浏览器中打开开发者工具,点击F12(在Chrome、Firefox或Edge中):
  • 转到控制台选项卡并查找结果
  • 展开结果,即可找到所需的对象
  • 右键单击并“复制属性路径”
  • 根据需要在代码中使用
    对象路径

  • 错误处理程序有三个参数。使用它们…jsonp是调用脚本javascript所在的其他域。您在控制台中遇到了什么具体错误?通常情况下,这是一个
    数据类型不匹配
    ,您试图获取jsonp,而服务器返回的数据是JSON,这会在jQuery例程中触发错误,另外,您在成功时解析返回数据的方式是错误的…请参阅我的答案。“…我通过jQuery.Ajax()调用它,但它总是返回到它的错误部分。”因此调用该函数(在问题中未显示的任何位置…)感谢返回-无法使用“$”,因为某些原因它无法工作,并且它在另一个站点下运行,所以我不会花时间去检查这个-我知道,buit是其他人的问题:)我宁愿保持async false,如果它不影响结果,那么它只能在返回后工作。对于我所做的其他事情,它正在发挥作用now@SammuelMiranda,在这种特殊情况下,如果要解决此问题,则意味着设置为true以保持运行其余代码,直到结果就绪为止,有时您可能需要它。很高兴你能成功,问候你。
    <html>
    <head>
        <script type="text/javascript">
                function loadcall(data)
                {
                    jQuery.ajax({
                        async:false,
                        method:'POST',
                        crossDomain:true,
                        dataType:'jsonp',
                        url:'http://example.com/ajax.php?getcodenode',
                        data:{'arg':data},
                        success:function(result){
                            var ret=JSON.parse(result);
                            var el=jQuery('#abc');
                            for(en in ret.itens)
                            {
                                el.Append('<div id="item_'+en.id+'">'+en.lb+', '+en.ds+'</div>');
                            }
                        },
                        error:function(result){alert('Error (loadcall)');}
                    });
                }
    loadcall('somethingData')
        </script>
    </head>
    <body>
        <div id="abc"></div>
    </body>
    </html>
    
    <script type="text/javascript">
        loadcall("test"); 
        // as pointed you need to call the function so it runs
    
        function loadcall(data) {
            $.ajax({
                async: true,
                method: 'POST',
                crossDomain: true,
                dataType: 'json', //your data type should be JSON not JSONP
                url: 'page.php?getcodenode',
                data: {
                    'arg': data
                },
                success: function(result) {
                    console.log(result); 
                     // see attached image how to get the path for object
                    var ret = result;
                    var el = $('#abc');
                    for (en in ret.itens) {
                        console.log(ret.itens[en].ds);
                        el.append('<div id="item_' + ret.itens[en].id + 
                        '">' + ret.itens[en].lb + ', ' + ret.itens[en].ds + '</div>');
                    }
                },
                error: function(result) {
                    console.log(result);
                }
            });
        }
    </script>