繁体   English   中英

Ajax,JSON对象与php交互

[英]Ajax, JSON objects interaction with php

我是JSON和Ajax的新手。 基本上,我试图从mysql数据库中获取事件列表,并将它们作为JSON编码的文件发送回.ajax()并从该函数显示那些事件列表。 我尝试了不同的方法,但我不认为自己走在正确的道路上。 作为Ajax和JSON的新手,使用Ajax发送和接收数据有些混乱,但很有趣

JSON对象和数组使我感到困惑,我不知道如何访问内部元素而感到震惊

$.ajax({ 
...
...
...
})
.done(function(result)
{
})

result是对象还是数组或字符串? 我应该在这里使用JSON.parse()方法还是应该将result直接用于数据的处理和显示?

这是我的后端php文件的输入格式,

{"data": 
    {
        "dept": "CSE"
    }
}

此输入来自一个下拉列表,

$("#dept_drop_down").on("change", function() {
...
...
})

我的php文件的输出格式是

{
  "data": {
    "status": "success",
    "response_code": "202",
    "events": {
      "1": {
        "name": "Help Dexter",
        "desc": "Help Dexter to Solve the Puzzle",
        "coordinate": "1307",
        "dept": "CSE"
      },
      "2": {
        "name": "Code Hunt",
        "desc": "Lets hunt the CODE ..!!",
        "coordinate": "2145",
        "dept": "CSE"
      }
    }
  }
}

请帮助我使用JavaScript代码,以发送输入格式JSON和接收输出格式JSON并使用AJAX(上面给出的输入和输出格式)显示它们。

等待您的帮助。 提前致谢...

这是我的代码...

$(document).ready(function(){ 
    $("#dept_drop_down").on("change", function(){ 
        var dat = $(document.getElementById("dept")).serializeJSON();
        var postdata = JSON.stringify(dat); 
        $.ajax({ 
            url: "elist.php", 
            type: "POST", 
            data: postdata, 
            datatype: 'application/json', 
            error: function(xhr,a,b){alert("This is "+xhr.status)}, 
            beforeSend: function(){alert("Sending.......")}, 
            success:function(result){ 
                var obj=result; 
                d=$.parseJSON(result); 
                if(obj.data.resopnse_code==202)
                { 
                    //object processing .. Here is the place i need help
                }
                else if(obj.data.response_code==200)
                { 
                    //object processing .. Here is the place i need help
                } 
                else if(obj.data.response_code==201)
                { 
                    //object processing .. Here is the place i need help
                } 
                else if(obj.data.response_code==400)
                { 
                    //object processing .. Here is the place i need help
                } 
            }    
        });     
    }); 
});

结果是一个字符串。 您可以使用jQuery.parseJSON制作一个JSON对象。

var jsonObj = jQuery.parseJSON( result );

您可以使用创建的变量(在我的示例jsonObj中 )和元素的名称访问内部元素。

假设您要在JSON中使用第二个事件的坐标,请使用

jsonObj.events.data[1].coordinate

那是:

  • jsonObj:访问主要的JSON对象
  • 数据:访问jsonObj中的数据元素
  • 事件:访问数据中的 事件
  • 1 :访问事件元素中的1个元素
  • 坐标: 第二个事件元素中的访问坐标

那将返回字符串“ 1307”

总体而言,获得Ajax并不难,而且您似乎已经对此有所了解。

这是一个操场: http : //codepen.io/anon/pen/WrZQrj

好吧,这完全取决于您的PHP脚本以Content-Type返回给调用的内容。 例如,假设我们在上面包含一个包含您的对象文本的json.json文件,我可以这样编写PHP脚本:

<?php

$content =file_get_contents ('json.json') ;
echo $content ; // I echo a string here
die ;

Ajax调用将收到一个文本字符串,因为该调用默认为text / plain Content-Type

$.post ('php.php', {}, function (ret, status) {
    alert (ret) ; // Will alert text
    if ( typeof ret === 'string' )
        ret =JSON.parse (ret) ;
    alert (ret) ; // Will alert [Object] [Object]
    // ret.data.status == 'success'
}) ;

现在,如果我的PHP脚本执行以下操作:

<?php

$content =file_get_contents ('json.json') ;
header ('Content-Type: application/json') ;
echo $content ; // I echo a string here still
die ;

他们有区别。 现在,我得到了一个JSON对象:

$.post ('php.php', {}, function (ret, status) {
    alert (ret) ; // Will alert [Object] [Object]
    if ( typeof ret === 'string' ) // << will not execute anymore
        ret =JSON.parse (ret) ;
    alert (ret) ; // Will alert [Object] [Object]
    // ret.data.status == 'success'
}) ;

我在第二个中保留了if()和JSON.parse(),但在最后一种情况下不再使用它们。

最后一件事,在PHP代码中,我回显了一个来自文件的字符串,但是如果您有一个由脚本构建的对象,则代码如下

$content =(object)[] ;
$content.data =(object)[ "status" => "success" } ;
...
header ('Content-Type: application/json') ;
echo json_encode ($content) ; // I echo a string here
die ;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM