Ajax可以向页面传递对象嘛?

解决方案 »

  1.   

    ajax返回的是xml,txt 返回的文本类型要通过js去处理,
    你就算返回个对象,js怎么去操作呢? 应该是不能返回对象的,把对象放session里面,再就是先要在js里面写好这个对象处理的方法,那是java代码,它会在页面加载的时候就执行.
      

  2.   

    我现在要用ajax做分页!但是需要专递一个对象到页面
      

  3.   

    那你可以把对象里需要呈现在页面上的数据先提取出来,以xml的格式返回,然后通过前台js进行处理
      

  4.   

    除了文本,ajax也可以返回对象的.
    不过3楼说得对,一般没必要把整个对象送过去.
    建议使用JSON封装必要的数据,它比xml简单,本身就是js的对象格式,同js交互不会有什么障碍喵~~``
      

  5.   

    ajax当然可以传对象,使用AJAX的DWR框架
    只是要在dwr.XML中配置下你要传的对象就可以了 <create creator="new" javascript="People" scope="script">
          <param name="class" value="org.getahead.dwrdemo.people.People"/>
     </create>
        <convert match="org.getahead.dwrdemo.people.Person" javascript="Person" converter="bean"/>
      

  6.   

    真正在网络中进行数据传输时,一般是不推荐直接传递对象的,都是用其他的方式来代替,而最安全也最广泛的方式就是把对象转化成为xml文件在网络中进行传递,这样,在接受方只要对xml文件进行解析,仍然是可以的。
    这是小弟的愚见啦,呵呵
      

  7.   

    楼上各位所说的可以传递对象,指的是可以传递javascript可以识别的json格式数据。其实就是在javascript中重新构造一下对象的结构,并赋值。但是需要在后台将对象序列化为json格式
      

  8.   

    可以传递的:
         2.调用有简单返回值的java方法 
    2.1、dwr.xml的配置 
    配置同1.1 
    <dwr> 
    <allow> 
    <create creator="new" javascript="testClass" > 
    <param name="class" value="com.dwr.TestClass" /> 
    <include method="testMethod2"/> 
    </create> 
    </allow> 
    </dwr> 
    2.2、javascript中调用 
    首先,引入javascript脚本 
    其次,编写调用java方法的javascript函数和接收返回值的回调函数 
    Function callTestMethod2(){ 
    testClass.testMethod2(callBackFortestMethod2); 

    Function callBackFortestMethod2(data){ 
    //其中date接收方法的返回值 
    //可以在这里对返回值进行处理和显示等等 
    alert("the return value is " + data); 

    其中callBackFortestMethod2是接收返回值的回调函数 
    3、调用有简单参数的java方法 
    3.1、dwr.xml的配置 
    配置同1.1 
    <dwr> 
    <allow> 
    <create creator="new" javascript="testClass" > 
    <param name="class" value="com.dwr.TestClass" /> 
    <include method="testMethod3"/> 
    </create> 
    </allow> 
    </dwr> 
    3.2、javascript中调用 
    首先,引入javascript脚本 
    其次,编写调用java方法的javascript函数 
    Function callTestMethod3(){ 
    //定义要传到java方法中的参数 
    var data; 
    //构造参数 
    data = “test String”; 
    testClass.testMethod3(data); 
    }4、调用返回JavaBean的java方法 
    4.1、dwr.xml的配置 
    <dwr> 
    <allow> 
    <create creator="new" javascript="testClass" > 
    <param name="class" value="com.dwr.TestClass" /> 
    <include method="testMethod4"/> 
    </create> 
    <convert converter="bean" match=""com.dwr.TestBean"> 
    <param name="include" value="username,password" /> 
    </convert> 
    </allow> 
    </dwr> 
    <creator>标签负责公开用于Web远程的类和类的方法,<convertor>标签则负责这些方法的参数和返回类型。convert元素的作用是告诉DWR在服务器端Java 对象表示和序列化的JavaScript之间如何转换数据类型。DWR自动地在Java和JavaScript表示之间调整简单数据类型。这些类型包括Java原生类型和它们各自的封装类表示,还有String、Date、数组和集合类型。DWR也能把JavaBean转换成JavaScript 表示,但是出于安全性的原因,要求显式的配置,<convertor>标签就是完成此功能的。converter="bean"属性指定转换的方式采用JavaBean命名规范,match=""com.dwr.TestBean"属性指定要转换的javabean名称,<param>标签指定要转换的JavaBean属性。 
    4.2、javascript中调用 
    首先,引入javascript脚本 
    其次,编写调用java方法的javascript函数和接收返回值的回调函数 
    Function callTestMethod4(){ 
    testClass.testMethod4(callBackFortestMethod4); 

    Function callBackFortestMethod4(data){ 
    //其中date接收方法的返回值 
    //对于JavaBean返回值,有两种方式处理 
    //不知道属性名称时,使用如下方法 
    for(var property in data){ 
    alert("property:"+property); 
    alert(property+":"+data[property]); 

    //知道属性名称时,使用如下方法 
    alert(data.username); 
    alert(data.password); 

    其中callBackFortestMethod4是接收返回值的回调函数5、调用有JavaBean参数的java方法 
    5.1、dwr.xml的配置 
    配置同4.1 
    <dwr> 
    <allow> 
    <create creator="new" javascript="testClass" > 
    <param name="class" value="com.dwr.TestClass" /> 
    <include method="testMethod5"/> 
    </create> 
    <convert converter="bean" match="com.dwr.TestBean"> 
    <param name="include" value="username,password" /> 
    </convert> 
    </allow> 
    </dwr> 
    5.2、javascript中调用 
    首先,引入javascript脚本 
    其次,编写调用java方法的javascript函数 
    Function callTestMethod5(){ 
    //定义要传到java方法中的参数 
    var data; 
    //构造参数,date实际上是一个object 
    data = { username:"user", password:"password" } 
    testClass.testMethod5(data); 
    }6、调用返回List、Set或者Map的java方法 
    6.1、dwr.xml的配置 
    配置同4.1 
    <dwr> 
    <allow> 
    <create creator="new" javascript="testClass" > 
    <param name="class" value="com.dwr.TestClass" /> 
    <include method="testMethod6"/> 
    </create> 
    <convert converter="bean" match="com.dwr.TestBean"> 
    <param name="include" value="username,password" /> 
    </convert> 
    </allow> 
    </dwr> 
    注意:如果List、Set或者Map中的元素均为简单类型(包括其封装类)或String、Date、数组和集合类型,则不需要<convert>标签。 
    6.2、javascript中调用(以返回List为例,List的元素为TestBean) 
    首先,引入javascript脚本 
    其次,编写调用java方法的javascript函数和接收返回值的回调函数 
    Function callTestMethod6(){ 
    testClass.testMethod6(callBackFortestMethod6); 

    Function callBackFortestMethod6(data){ 
    //其中date接收方法的返回值 
    //对于JavaBean返回值,有两种方式处理 
    //不知道属性名称时,使用如下方法 
    for(var i=0;i<data.length;i++){ 
    for(var property in data){ 
    alert("property:"+property); 
    alert(property+":"+data[property]); 


    //知道属性名称时,使用如下方法 
    for(var i=0;i<data.length;i++){ 
    alert(data.username); 
    alert(data.password); 

    }7、调用有List、Set或者Map参数的java方法 
    7.1、dwr.xml的配置 
    <dwr> 
    <allow> 
    <create creator="new" javascript="testClass" > 
    <param name="class" value="com.dwr.TestClass" /> 
    <include method="testMethod7"/> 
    </create> 
    <convert converter="bean" match="com.dwr.TestBean"> 
    <param name="include" value="username,password" /> 
    </convert> 
    </allow> 
    <signatures> 
    <![CDATA[ 
    import java.util.List; 
    import com.dwr.TestClass; 
    import com.dwr.TestBean; 
    TestClass.testMethod7(List<TestBean>); 
    ]]> 
    </signatures> 
    </dwr> 
    <signatures>标签是用来声明java方法中List、Set或者Map参数所包含的确切类,以便java代码作出判断。 
    7.2、javascript中调用(以返回List为例,List的元素为TestBean) 
    首先,引入javascript脚本 
    其次,编写调用java方法的javascript函数 
    Function callTestMethod7(){ 
    //定义要传到java方法中的参数 
    var data; 
    //构造参数,date实际上是一个object数组,即数组的每个元素均为object 
    data = [ 

    username:"user1", 
    password:"password2" 
    }, 

    username:"user2", 
    password:" password2" 

    ]; 
    testClass.testMethod7(data); 
    }注意: 
    1、对于第6种情况,如果java方法的返回值为Map,则在接收该返回值的javascript回调函数中如下处理: 
    function callBackFortestMethod(data){ 
    //其中date接收方法的返回值 
    for(var property in data){ 
    var bean = data[property]; 
    alert(bean.username); 
    alert(bean.password); 


    2、对于第7种情况,如果java的方法的参数为Map(假设其key为String,value为TestBean),则在调用该方法的javascript函数中用如下方法构造要传递的参数: 
    function callTestMethod (){ 
    //定义要传到java方法中的参数 
    var data; 
    //构造参数,date实际上是一个object,其属性名为Map的key,属性值为Map的value 
    data = { 
    "key1":{ 
    username:"user1", 
    password:"password2" 
    }, 
    "key2":{ 
    username:"user2", 
    password:" password2" 

    }; 
    testClass.testMethod(data); 

    并且在dwr.xml中增加如下的配置段 
    <signatures> 
    <![CDATA[ 
    import java.util.List; 
    import com.dwr.TestClass; 
    import com.dwr.TestBean; 
    TestClass.testMethod7(Map<String,TestBean>); 
    ]]> 
    </signatures> 
    3、由以上可以发现,对于java方法的返回值为List(Set)的情况,DWR将其转化为Object数组,传递个javascript;对于java方法的返回值为Map的情况,DWR将其转化为一个Object,其中Object的属性为原Map的key值,属性值为原Map相应的value值。 
    4、如果java方法的参数为List(Set)和Map的情况,javascript中也要根据3种所说,构造相应的javascript数据来传递到java中。