
判断麻烦的标准是啥
假定用的jquery;
要是之后不需要用到ajax返回的数据, 导航栏点击的事件绑定用one而不是bind或者on;
如果之后还需要用到ajax返回的数据, 就缓存, 缓存可以是服务端缓存类似redius或其他, 也可以是客户端缓存如放到个全局变量, 如果嫌变量太多, 可以将数据绑到DOM上, 如$domdata("key", ajaxData); 之后再用$domdata("key")取出;
以目前功力能想到的就酱
你的返回的数据类型不同,读取的方式也不同。
如果是一般的html文本可以直接拿到。
像json、xml可以使用jquery的 $each();函数根据返回值的主键获取相应的数据。
1
2
3
4
5
6
7
8
//返回json
$post("dataashx",{},function(datas){
var html;
$each(datas, function(i, data){
html+=dataname
});
$(html)appendto("body");
});
xml的读取形式大体是也是这样的只是取数据的时候有一些变化
因为对于react来说,同级组件之间的通信尤为麻烦,或者是非常麻烦了,所以我们把所有需要多个组件使用的state拿出来,整合到顶部容器,进行分发。
这个包里有Provider、connect。
就比如有一个大盒子(顶层容器Provider),里面有很多小盒子(组件Component),小盒子之间不能通信啊,每个盒子都有一个壳子,state穿不过去啊,于是就有connect来进行连接state和Component。
Provider作为顶层容器接受store作为参数,进行state分发,在这里,state并不是清晰的设置一个对象,所有的共享数据都在里面,而是由多个reducer组成,每个reducer有一个小的state,多个小的state就组成了一个大的state。Provider在所有Router的最外层。
connect存在于每个需要共享数据的组件里,connect方法接受两个函数:
mapStateToProps:mapStateToProps接收state和当前组件的props作为参数,mapStateToProps会在state里面取出当前组件需要的数据,映射到当前组件的props上,这就实现了顶层数据分发到组件。(这个函数是自己定义的,名字不做严格要求,实现state到props映射的功能就好了)
mapDispatchToProps:它接收dispatch作为参数,将当前组件会用到的dispatch(action)映射到当前组件的事件回调函数fun上,这里讲action换个名字注入到props里面,然后可以在组件内部调用,直接dispatch(action)就好了。
在这里解释一下bindActionCreators,这个东西是把当前组件的action传到它的子组件上的一个方法,在子组件标签上展开就好了。具体我也没用过,用到了再来补充。
上面的中,将两个方法直接传入connect方法中,封装的connect方法会把两个函数需要的参数注入,从而实现state和dispatch的映射。
connect方法会把dispatch函数注入到当前组件的props里面,真的,原来我都不知道dispatch从哪里引进来的。用了connect方法之后,就可以{ dispatch } = thisprops;就是这样的!
action是一个对象,有一个必要的参数type,剩下的参数key和value自定义,但是因为reducer是纯函数,所以通常的ajax请求都是在action完成的,我看最近一个项目,是在view层dispatch(action1),在action1里dispatch(action2)。上面的action1里面存在数据的请求,将请求回来的数据给action2做参数,action2是一个标准的action,因为它有type。可以触发reducer。
组件中触发事件,action只是一个对象而已,只有dispatch(action)才能触发reducer去修改state,那么。。。dispatch(action)之后,是怎么找到相应的reducer的?咋找到的?
看了一下源码,dispatch函数在createStore方法里面,会用到所有的reducer,所以我估计是把所有的reducer执行一遍。。。不匹配actionType的reducer就把当前的state完整不变的返回,符合的就生成一个新的state返回作为当前的state。嗯,,就是这样的。。。
然后Reducer会接受当前的state和传入的actionType判断处理state。reducer是纯函数,一样的输入必须要得到一样的输出。reducer不能修改当前的state,必须复制一份,修改这个新的,然后返回新的对象作为当前的state。
reducer这里有个辅助函数,将所有的reducer整合到一个大的reducer里,传给createStore做参数。
会把一个由多个不同 reducer 函数作为 value 的 object,合并成一个最终的 reducer 函数,然后就可以对这个 reducer 调用 createStore。
这个state很是神奇啊,每次变动state的时候都会生成一个新的state,所以内存中就会有很多不同时刻的state,
方法和详细的 *** 作步骤如下:
1、第一步,安装并配置PHP集成环境,以phpstudy为例,见下图,转到下面的步骤。
2、第二步,完成上述步骤后,在>
3、第三步, 完成上述步骤后,html文件首先引用所需的类库jquery文件,然后引用正文部分,以简单的表单提交为例,见下图,转到下面的步骤。
4、第四步,完成上述步骤后,html的javascript-ajax部分,以上一步正文中的cilik事件为例,见下图,转到下面的步骤。
5、第五步,完成上述步骤后,php文件的准备部分主要使用$ _POST接受ajax传输的数据,并且可以返回不同类型的数据。
例如回声结果或转码为json格式的json_encode数据将返回到前端进行处理,见下图,转到下面的步骤。
6、第六步,完成上述步骤后,结果显示:提交表单中的内容后,无需刷新即可显示该内容,见下图。这样,就解决了这个问题了。
jqueryajax方法在执行成功之后,就能直接获取后台返回的值,该值直接在success对应的function参数上。
$ajax({
type: "POST",
url: "<%=path %>/two",
dataType: "json",
data:{'liDu':liDu,'startTime':startTime,'endTime':endTime},
success: function(returnedData){
alert(returnedData);
}
});
执行成功之后returnedData就是后台返回值。
ajax可以写在Store中,也可以写在Action中。之前使用reflux的时候是把ajax写在Store中,造成Store既要 *** 作数据又要请求数据,整体有些庞大复杂。后来使用Redux之后,把ajax转移到Action中,数据请求成功后调用dispatch、Store只管接收新的数据。这样职责都变得单一明了:Store的职责是 *** 作已有数据,Action的职责是发送有效载荷给Store。
以上就是关于页面多次发送ajax的问题,如何不再次发送请求,获取之前得到的数据全部的内容,包括:页面多次发送ajax的问题,如何不再次发送请求,获取之前得到的数据、.net 怎样获取ajax 里data值、Redux有什么用做了什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)