GVKun编程网logo

方法完成API调用之前的JSON响应(方法完成api调用之前的json响应失败)

10

针对方法完成API调用之前的JSON响应和方法完成api调用之前的json响应失败这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展.NETCore:从APIJSON响应中删除空字段、Ajax

针对方法完成API调用之前的JSON响应方法完成api调用之前的json响应失败这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展.NET Core:从API JSON响应中删除空字段、Ajax 接收服务器返回的json响应方法、android – 知道Firebase何时完成API调用?、Apiary:是否可以记录JSON响应字段?等相关知识,希望可以帮助到你。

本文目录一览:

方法完成API调用之前的JSON响应(方法完成api调用之前的json响应失败)

方法完成API调用之前的JSON响应(方法完成api调用之前的json响应失败)

如何解决方法完成API调用之前的JSON响应?

那么有人可以帮助我解决此问题吗?我的json响应空了,因为它是在API调用完成之前将数据发送回去的。

我正在传递一堆称为问题的数据集,并对其进行映射以仅获取注释部分。从那里,我访问评论ID,以填充与该评论关联的作者数据。每次将数据推入数组。如果设置了超时,它会给我的API方法一些时间来获取数据,并且前端显示的数据是正确的。但是,如果我只是res.json(arr),则数据显示为空[]。

有什么比使用setTimeout方法更好的解决方案?

router.get("/:id/comments",(req,res) => {
  Issue.findById(req.params.id)
    .populate("comments")
    .exec()
    .then((findissue) => {
      var arr = [];
      findissue.comments.map((comment) =>
        Comment.findById(comment._id)
          .populate("author")
          .exec()
          .then((data) => arr.push(data))
          .catch((err) => console.log(err))
      );

      //res.json(arr);  //---Comes up as empty

      setTimeout(() => {   //---My soluiton
        res.json(arr);
      },6000);
    });
});

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

.NET Core:从API JSON响应中删除空字段

.NET Core:从API JSON响应中删除空字段

在.NET Core 1.0(所有API响应)的全局级别上,如何配置Startup.cs,以便在JSON响应中删除/忽略空字段?

使用Newtonsoft.Json,您可以将以下属性应用于属性,但我希望避免将其添加到每个属性中:

[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]public string FieldName { get; set; }[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]public string OtherName { get; set; }

答案1

小编典典

[.NET Core 1.0]

在Startup.cs中,可以将JsonOptions附加到服务集合,并在其中设置各种配置,包括删除空值:

public void ConfigureServices(IServiceCollection services){     services.AddMvc()             .AddJsonOptions(options => {                options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;     });}

[.NET Core 3.1]

代替:

options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;

用:

options.JsonSerializerOptions.IgnoreNullValues = true;

Ajax 接收服务器返回的json响应方法

Ajax 接收服务器返回的json响应方法

1、什么是JSON?

JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。它基于 ECMAScript 规范的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。这是百度百科给出的JSON的定义。

我理解的JSON是JS创建对象的一种方法,后来从JS中独立出来,作为一种字符串数据的表示法,被各种语言支持;相对于XML而言,比XML更加轻量级、简洁、处理速度更快;

2、JSON的两种格式:

JSON对象字符串格式:''{"key1":"value1","key2":"value2"}''

JSON数组字符串格式:''[value1,value2,value3,...]''

3、JSON 与 JS 对象的关系:

JSON 是 JS 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串。

var obj = {a: ''Hello'', b: ''World''}; //这是一个对象,注意键名也是可以使用引号包裹的
var json = ''{"a": "Hello", "b": "World"}''; //这是一个 JSON 字符串,本质是一个字符串

4、JSON 和 JS 对象互转

浏览器提供的方法:

要实现从JS对象转换为 JSON 字符串,使用 JSON.stringify() 方法:

var json = JSON.stringify({a: ''Hello'', b: ''World''}); //结果是 ''{"a": "Hello", "b": "World"}''

要实现从 JSON 转换为JS对象,使用 JSON.parse() 方法:

var obj = JSON.parse(''{"a": "Hello", "b": "World"}''); //结果是 {a: ''Hello'', b: ''World''}

注:ie8(兼容模式),ie7和ie6没有JSON对象,推荐采用JSON官方的方式,引入json.js

jquery提供的方法 :

$.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转换成json对象 

Javascript提供的方法:

eval(''('' + jsonstr + '')''); //可以将json字符串转换成json对象,注意需要在json字符外包裹一对小括号 

注:ie8(兼容模式),ie7和ie6也可以使用eval()将字符串转为JSON对象,但不推荐这些方式,这种方式不安全eval会执行json串中的表达式。

以上这篇Ajax 接收服务器返回的json响应方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

您可能感兴趣的文章:
  • ajax响应json字符串和json数组的实例(详解)
  • Node.js如何响应Ajax的POST请求并且保存为JSON文件详解
  • 原生JS实现Ajax跨域请求flask响应内容
  • Js中使用hasOwnProperty方法检索ajax响应对象的例子
  • 原生javascript的ajax请求及后台PHP响应操作示例
  • 在AngularJs中设置请求头信息(headers)的方法及不同方法的比较
  • selenium设置proxy、headers的方法(phantomjs、Chrome、Firefox)
  • node.js中的http.response.getHeader方法使用说明
  • node.js中的http.response.setHeader方法使用说明
  • node.js中的http.response.removeHeader方法使用说明
  • js 使用ajax设置和获取自定义header信息的方法小结

android – 知道Firebase何时完成API调用?

android – 知道Firebase何时完成API调用?

当我的Firebase API调用完成时,我有些麻烦.阅读Firebase文档后,我发现以下内容:

Value events are always triggered last and are guaranteed to contain updates from any other events which occurred before that snapshot was taken.

我理解这一点意味着只有在所有的onChildAdded调用完成之后,才会调用ValueEventListener.因此,我想我可以在onChildAdded函数中填充RecyclerView,然后在onSingleValueListener调用中填充我的RecyclerView,我可以简单地完成动画加载屏幕(已经开始在此函数调用之前进行动画化)并继续.但是,我遇到了一个问题,在这里我放了一些细节的System.out.println语句,发现在我的情况下,测试1被调用之前测试2被调用.这会导致问题,因为这实际上是我想要的相反的行为:我想要onChildAdded函数完成,然后调用打印出Test 1被调用的onSingleValueListener函数.有什么原因造成这种情况吗?这样吗?我会很乐意解释为什么会发生这种情况.谢谢!

public void getComments(final String postId,final Activity activity,final View fragmentView,final View progressOverlay) {
    final Firebase commentsRef = firebaseRef.child("/comments");
    Firebase linkRef = firebaseRef.child("/posts/" + postId);
    linkRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            System.out.println("Test 1");
            if (progressOverlay.getVisibility() == View.VISIBLE) {
                progressOverlay.setVisibility(View.GONE);
                AndroidUtils.animateView(progressOverlay,View.GONE,200);
                fragmentView.findViewById(R.id.rv_view_comments).setVisibility(View.VISIBLE);
            }
        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {

        }
    });
    linkRef.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot,String s) {
            commentsRef.child(dataSnapshot.getKey()).addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    Comment comment = dataSnapshot.getValue(Comment.class);
                    System.out.println("Test 2");
                    application.getCommentsRecyclerViewAdapter().getCommentsList().add(comment);
                    application.getCommentsRecyclerViewAdapter().notifyDataSetChanged();
                }

                @Override
                public void onCancelled(FirebaseError firebaseError) {

                }
            });
        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot,String s) {

        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot,String s) {

        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {

        }
    });
}

解决方法

使用此代码“Firebase linkRef = firebaseRef.child(”/ posts /“postId);”我可以看到您使用的是旧版Firebase API.现在已经弃用了

请将您的代码更新为新的Firebase 3.x.x API.

下面两个是独立的异步调用;根据用例,您可以使用其中一个侦听器来读取数据.

1. linkRef.addListenerForSingleValueEvent(new ValueEventListener() {});
2. linkRef.addChildEventListener(new ChildEventListener() {});

您可以参考firebase文档来获取有关数据库侦听器的更多信息.
https://firebase.google.com/docs/database/android/retrieve-data

使用以下代码段,您可以检索并填充您的注释列表.

public void getComments(final String postId,final View progressOverlay) {
    DatabaseReference commentsRef = firebaseRef.child("/comments");
    DatabaseReference linkRef = commentsRef.child("/posts/" + postId);
    linkRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            // Iterate through data-snapshot,and update your Adapter dataset
            for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                Comment comment = snapshot.getValue(Comment.class);
                application.getCommentsRecyclerViewAdapter().getCommentsList().add(comment);
            }
            application.getCommentsRecyclerViewAdapter().notifyDataSetChanged();

            // dismiss your loading progressbar
            if (progressOverlay.getVisibility() == View.VISIBLE) {
                progressOverlay.setVisibility(View.GONE);
                AndroidUtils.animateView(progressOverlay,200);
                fragmentView.findViewById(R.id.rv_view_comments).setVisibility(View.VISIBLE);
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            // Handle fail case here
        }
    });

希望这会帮助你!

Apiary:是否可以记录JSON响应字段?

Apiary:是否可以记录JSON响应字段?

我想要记录实际的 JSON字段本身所代表的内容.

我已经记录了GET语句和参数,但这并没有提供给用户的完整的文档.

所以,在下面的例子中,如何添加关于“OtherFields”的评论.这是否支持?或者我需要在其他地方做一个配套文件.

## View Applications [/cat{?sort}{&order}{&page}]
### List all Applications 
### Get List of Applications [GET]
+ Parameters
    + sort (optional,string) ... `sort` parameter is used to specify which criteria to use for sorting. One of the following strings may be used: 
    `"NAME","rating","QUALITY","RISKLEVEL",`

    + order (optional,string) ... `order` parameter is used to specify which order to use if sorting is used. One of the following strings may be used: 
    `"ASC","DESC"`

    + page (optional,int ) ... `page` parameter is used to request subsequent catalog pages.


+ Response 200 (application/json)

                {
            "Catalog" : {
                "Page" : 0,"Count" : 6,"Applications" : [{
                        "UID" : "6882e96a-5da1-11e3-1111-3f24f45df3ad"
                        "OtherFields: ""
               }]
               }}

解决方法

更新:我们刚刚推出了使用 MSON syntax的属性描述测试版.

原始有效载荷可以描述为

### Get List of Applications [GET]

+ Response 200 (application/json)

    + Attributes
        + Catalog (object)
            + Page: 0 (number) - Number of the page
            + Count: 6 (number) - Count of *Lorem Ipsum*
            + Applications (array) - Some array of something
                + (object)
                    + UID: `6882e96a-5da1-11e3-1111-3f24f45df3ad`
                    + OtherFields

    + Body 

            {
                "Catalog" : {
                    "Page" : 0,"Applications" : [{
                        "UID" : "6882e96a-5da1-11e3-1111-3f24f45df3ad"
                        "OtherFields": ""
                    }]
                }
            }

注意,身体中的显式JSON是多余的,您可以完全跳过它.有关其他详细信息,请参阅API蓝图规范 – Attributes

关于方法完成API调用之前的JSON响应方法完成api调用之前的json响应失败的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于.NET Core:从API JSON响应中删除空字段、Ajax 接收服务器返回的json响应方法、android – 知道Firebase何时完成API调用?、Apiary:是否可以记录JSON响应字段?的相关知识,请在本站寻找。

本文标签: