想要实现的是将JSP中的数据(xml)传递给服务器端,再解析从服务器端获得的xml,具体如下:post调用地址:http://XXXXX/
post的参数名称:fromdata将登陆界面的用户名和密码保存格式为:
<?xml version="1.0" encoding="UTF-8" ?>
        <auth>
 
        <email>username</email>
        <password>password</password>
 
</auth>然后服务器端返回的xml为:
<?xml version="1.0" encoding="UTF-8"?>
 
        <result>
 
        <retCode>0</retCode>
 
        <retInfo>认证成功</retInfo>
 
</result>主要是解析retCode的值...
ajax传数据不是很懂啊,所以希望能有比较完整的代码,各位大神帮帮忙,时间很紧...
xmlajaxjson服务器jsp

解决方案 »

  1.   

    var xmlData = 'xxxxxxxx';$.ajax({
        type:     "POST",
        data:     {fromdata:xmlData},
        url:      "http://XXXXX/",
        dataType: "json", //返回json,也可改为html
        async:    false,
        success:  function(json) {
         //处理返回结果
        },
        error:  function(data) {
         //处理错误
        }
    });
      

  2.   

    js 处理XML功能还不完善。推荐使用json  
      

  3.   

    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
    <script>
        function check(f) {
            var xml = '<?xml version="1.0" encoding="UTF-8" ?><auth><email>' + f.email.value + '</email><password>' + f.password.value + '</password></auth>';
            $.ajax({ url: '动态页地址',
                type: 'POST',
                data: 'data=' + encodeURIComponent(xml),
                dataType: 'xml',
                success: function (xmlDoc) {
                    var retCode = $(xmlDoc).find('retCode').text();
                    alert(retCode);
                },
                error: function (xhr) { alert('发生错误!\n' + xhr.responseText); }
            });        return false;
        }
           
    </script>
    </head>
    <body>
    <form onsubmit="return check(this)">
    <INPUT name=email class="inp" id="text" size=15 maxLength=40> 
    <INPUT name=password type=text1 class="inp" id="text1">
      
    <input type="submit" value="submit" />
    </form>
    </body>
    </html> 
      

  4.   

    那post的参数fromdata用在哪呢?那post的参数fromdata用在哪呢?
      

  5.   

    那怎样对json解析呢?我主要是获得retCode和retInfo的值
      

  6.   

    那post的参数fromdata用在哪呢?晕,不都给你示例了。。要自己组合,那个别人只是说明性的
      

  7.   

    那post的参数fromdata用在哪呢?晕,不都给你示例了。。要自己组合,那个别人只是说明性的我是把data中的data=换成参数fromdata的,应该是这样的吧,但是最后结果是显示发生错误,并且没有xhr.responseText信息...
      

  8.   

    data: 'fromdata=' + encodeURIComponent(xml),
    这样就行了
      

  9.   

    我是这样改的但是最后结果是“发生错误”,而且没有xhr.responseText信息返回,不知道哪里有问题...
      

  10.   

    动态页设置了contexttype为text/xml了吗不行将dataType改为html试试
      

  11.   

    改为html的话,会有提示框,但是提示框里没有内容...
      

  12.   

        function check(f) {
            var xml = '<?xml version="1.0" encoding="UTF-8" ?><auth><email>' + f.email.value + '</email><password>' + f.password.value + '</password></auth>';
            $.ajax({ url: '动态页地址',
                type: 'POST',
                data: 'fromdata=' + encodeURIComponent(xml),
                dataType: 'html',
                success: function (xmlDoc) {
    alert(xmlDoc)//看输出什么,如果没有输出就是你的动态页有问题,没有返回内容
                    var retCode = $(xmlDoc).find('retCode').text();
                    alert(retCode);
                },
                error: function (xhr) { alert('发生错误!\n' + xhr.responseText); }
            });
     
            return false;
        }
      

  13.   

    url到底是什么?跨域了没有。。
    跨域请求不行
      

  14.   

    url:http://software.nju.edu.cn:8000/api/auth/user/
    跨域了应该怎么弄?
      

  15.   

    跨域了就要再自己的站点做个代理页面,用服务器端的xhr发送数据请求跨域页面获取返回的输出后输出,ajax请求代理页面,不能直接请求跨域的那个页面,安全问题不允许直接请求跨域的页面
      

  16.   

    jsp不会了,帮你移动到java版块去
      

  17.   

    jsp中读is流(包含xml信息)/**
     * 获取指定省份的城市列表
     * 返回Map<城市名,城市气象id>
     * @throws IOException 
     */
    public Map<String, String> getCityMap(String provincename) throws IOException {
    InputStream cityXml = null;
    Map<String,String> citymap=null;
    try {
    cityXml = dao.getCityXml(provincename);
    citymap=new HashMap<String,String>();
    SAXReader sr = new SAXReader();// 获取读取xml的对象。
    Document document;
    document = sr.read(cityXml);
    Element root = document.getRootElement();
    List<?> elementlist = root.elements("city"); for (Object obj : elementlist) {
    Element row = (Element) obj;
    String cityname = row.attribute("cityname").getText();
    String cityid =row.attribute("url").getText();
    citymap.put(cityname,cityid);
    }
    return citymap;
    } catch (DocumentException e) {
    Log.e(this.toString(), "document Error");
    }
    return null;
    }
      

  18.   

    没懂你意思,和我的问题有关?
    jsp是不是就是一个servlet?
    servlet中是不是可以运行java代码?
    这个java代码是不是可以把返回的流解析成xml对象?
      

  19.   

    没懂你意思,和我的问题有关?
    jsp是不是就是一个servlet?
    servlet中是不是可以运行java代码?
    这个java代码是不是可以把返回的流解析成xml对象?

    我现在不是要解析xml,而是要把数据以xml格式提交给一个url,因为是跨域的,所以需要弄个jsp作为代理,但是不知道应该怎样操作...
      

  20.   

    没懂你意思,和我的问题有关?
    jsp是不是就是一个servlet?
    servlet中是不是可以运行java代码?
    这个java代码是不是可以把返回的流解析成xml对象?

    我现在不是要解析xml,而是要把数据以xml格式提交给一个url,因为是跨域的,所以需要弄个jsp作为代理,但是不知道应该怎样操作...
    你的意思是想把xml文件拼接成json串发送?
    还是转化成流的方式发送?
      

  21.   

    没懂你意思,和我的问题有关?
    jsp是不是就是一个servlet?
    servlet中是不是可以运行java代码?
    这个java代码是不是可以把返回的流解析成xml对象?

    我现在不是要解析xml,而是要把数据以xml格式提交给一个url,因为是跨域的,所以需要弄个jsp作为代理,但是不知道应该怎样操作...
    你的意思是想把xml文件拼接成json串发送?
    还是转化成流的方式发送?

    我要传的数据类型就是xml,而且必须要是post方法,但是json是get的,因为验证那边的页面要求的是post方式的xml格式数据...
    请求码流样例:
    要求:
    post调用地址:http://software.nju.edu.cn:8000/api/auth/user/
    post的参数名称:fromdata  格式为:
     
            <?xml version="1.0" encoding="UTF-8" ?>
            <auth>
     
            <email>[email protected]</email>
            <password>CY9rzUYh03PK3k6DJie09g==</password>
     
            </auth>
    这种要求转化成流可行?
      

  22.   

    没懂你意思,和我的问题有关?
    jsp是不是就是一个servlet?
    servlet中是不是可以运行java代码?
    这个java代码是不是可以把返回的流解析成xml对象?

    我现在不是要解析xml,而是要把数据以xml格式提交给一个url,因为是跨域的,所以需要弄个jsp作为代理,但是不知道应该怎样操作...
    你的意思是想把xml文件拼接成json串发送?
    还是转化成流的方式发送?

    我要传的数据类型就是xml,而且必须要是post方法,但是json是get的,因为验证那边的页面要求的是post方式的xml格式数据...
    请求码流样例:
    要求:
    post调用地址:http://software.nju.edu.cn:8000/api/auth/user/
    post的参数名称:fromdata  格式为:
     
            <?xml version="1.0" encoding="UTF-8" ?>
            <auth>
     
            <email>[email protected]</email>
            <password>CY9rzUYh03PK3k6DJie09g==</password>
     
            </auth>
    这种要求转化成流可行?
    我在做中央气象台的接口的时候,从url对象中获取返回流,就是xml格式的。
    我们写的字符串其实也是以流的形式来发送的,不是么?
      

  23.   

    那你的意思是写个Servlet接受我写的login.jsp的数据,在装成xml格式,以流的形式发送给验证的那个页面?
    但是servlet中怎样标志这是一段xml文件呢?不能标志的话,验证页面是检测不了的,要求就是这样的...
      

  24.   

    那你的意思是写个Servlet接受我写的login.jsp的数据,在装成xml格式,以流的形式发送给验证的那个页面?
    但是servlet中怎样标志这是一段xml文件呢?不能标志的话,验证页面是检测不了的,要求就是这样的...
    要么你想怎么发送信息?
    所有的信息都是包装到流里面的,接受页面肯定也会默认的去解析这个流,读出其中的信息。
    另外,login.jsp编译之后就等于servlet,这不叫接受。
    你的要求说白了,就是给服务端发送一段xml格式的文字,对么?
      

  25.   

    那你的意思是写个Servlet接受我写的login.jsp的数据,在装成xml格式,以流的形式发送给验证的那个页面?
    但是servlet中怎样标志这是一段xml文件呢?不能标志的话,验证页面是检测不了的,要求就是这样的...
    要么你想怎么发送信息?
    所有的信息都是包装到流里面的,接受页面肯定也会默认的去解析这个流,读出其中的信息。
    另外,login.jsp编译之后就等于servlet,这不叫接受。
    你的要求说白了,就是给服务端发送一段xml格式的文字,对么?
    是的,应该怎么处理?希望能有点代码参考下
      

  26.   

    那你的意思是写个Servlet接受我写的login.jsp的数据,在装成xml格式,以流的形式发送给验证的那个页面?
    但是servlet中怎样标志这是一段xml文件呢?不能标志的话,验证页面是检测不了的,要求就是这样的...
    要么你想怎么发送信息?
    所有的信息都是包装到流里面的,接受页面肯定也会默认的去解析这个流,读出其中的信息。
    另外,login.jsp编译之后就等于servlet,这不叫接受。
    你的要求说白了,就是给服务端发送一段xml格式的文字,对么?
    是的,应该怎么处理?希望能有点代码参考下
    我感觉应该是类似下面这样的吧?public void sendXmlTest() throws Exception {
    // 通过类装载器装载XML资源
    InputStream inputStream = this.getClass().getClassLoader()
    .getResourceAsStream("test.xml");
    byte[] xml = input2byte(inputStream); String path = "http://172.22.35.112:8080/videonews/GetXmlInfo";
    URL url = new URL(path);
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setRequestMethod("POST");
    conn.setConnectTimeout(5000);
    conn.setDoOutput(true); // 设置HTTP请求的头字段
    conn.setRequestProperty("Content-Type", "text/xml; charset=UTF-8"); // 内容类型
    conn.setRequestProperty("Content-Length", String.valueOf(xml.length)); // 实体内容的长度 conn.getOutputStream().write(xml); if (conn.getResponseCode() == 200) {
    System.out.println("发送成功!");
    } else {
    System.out.println("发送失败!");
    }
    } public static final byte[] input2byte(InputStream inStream)
    throws IOException {
    ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
    byte[] buff = new byte[100];
    int rc = 0;
    while ((rc = inStream.read(buff, 0, 100)) > 0) {
    swapStream.write(buff, 0, rc);
    }
    byte[] in2b = swapStream.toByteArray();
    return in2b;
    }
      

  27.   

    类装载器装载xml资源是通过路径读取xml文件吧,但是我这应该是不用读取xml文件的,应该是xml格式的String,不过注明是xml类型的,这样行不行?
      

  28.   

    类装载器装载xml资源是通过路径读取xml文件吧,但是我这应该是不用读取xml文件的,应该是xml格式的String,不过注明是xml类型的,这样行不行?
    我这是安卓的,所以通过类加载器去找。。
    你的xml文件在哪里呢?
    这个问题,如果只是字符串的话,把字符串转化为为inputstream流你应该会吧?
      

  29.   

    类装载器装载xml资源是通过路径读取xml文件吧,但是我这应该是不用读取xml文件的,应该是xml格式的String,不过注明是xml类型的,这样行不行?
    我这是安卓的,所以通过类加载器去找。。
    你的xml文件在哪里呢?
    这个问题,如果只是字符串的话,把字符串转化为为inputstream流你应该会吧?
    难道不可以直接把String转换为byte么...
    还有一个问题是post有一个参数,这个应该怎么传?
      

  30.   

    类装载器装载xml资源是通过路径读取xml文件吧,但是我这应该是不用读取xml文件的,应该是xml格式的String,不过注明是xml类型的,这样行不行?
    我这是安卓的,所以通过类加载器去找。。
    你的xml文件在哪里呢?
    这个问题,如果只是字符串的话,把字符串转化为为inputstream流你应该会吧?
    难道不可以直接把String转换为byte么...
    还有一个问题是post有一个参数,这个应该怎么传?
    当然可以了。我只是不习惯改动方法的输入参数而已。。这个方法的输入参数应该是inputstream。
    可以的话建议使用httpClient
    这样就可以创建多个NameValuePair对象保存值了。。http://www.oschina.net/code/snippet_1434_1032
    这个你看下
      

  31.   

    类装载器装载xml资源是通过路径读取xml文件吧,但是我这应该是不用读取xml文件的,应该是xml格式的String,不过注明是xml类型的,这样行不行?
    我这是安卓的,所以通过类加载器去找。。
    你的xml文件在哪里呢?
    这个问题,如果只是字符串的话,把字符串转化为为inputstream流你应该会吧?
    难道不可以直接把String转换为byte么...
    还有一个问题是post有一个参数,这个应该怎么传?
    当然可以了。我只是不习惯改动方法的输入参数而已。。这个方法的输入参数应该是inputstream。
    可以的话建议使用httpClient
    这样就可以创建多个NameValuePair对象保存值了。。http://www.oschina.net/code/snippet_1434_1032
    这个你看下
    想问下那个网页的代码中:PostMethod post = new PostMethod("/simcard.php");
    simcard.php是指哪个页面?
      

  32.   

    还有就是我的post参数是应该加在 NameValuePair simcard = new NameValuePair("simcard","1330227");
    的哪个位置?是前面的"simcard"改为"fromdata",还是"1330227"改为"fromdata="+xml字符串?
      

  33.   

    类装载器装载xml资源是通过路径读取xml文件吧,但是我这应该是不用读取xml文件的,应该是xml格式的String,不过注明是xml类型的,这样行不行?
    我这是安卓的,所以通过类加载器去找。。
    你的xml文件在哪里呢?
    这个问题,如果只是字符串的话,把字符串转化为为inputstream流你应该会吧?
    难道不可以直接把String转换为byte么...
    还有一个问题是post有一个参数,这个应该怎么传?
    当然可以了。我只是不习惯改动方法的输入参数而已。。这个方法的输入参数应该是inputstream。
    可以的话建议使用httpClient
    这样就可以创建多个NameValuePair对象保存值了。。http://www.oschina.net/code/snippet_1434_1032
    这个你看下
    想问下那个网页的代码中:PostMethod post = new PostMethod("/simcard.php");
    simcard.php是指哪个页面?

    它前面加了域名了和协议以及端口号了
    client.getHostConfiguration().setHost("www.imobile.com.cn", 80, "http");
    这方法等于添加地址。拼接起来的话应该是
    http://www.imobile.com.cn/simcard.php
      

  34.   

    还有就是我的post参数是应该加在 NameValuePair simcard = new NameValuePair("simcard","1330227");
    的哪个位置?是前面的"simcard"改为"fromdata",还是"1330227"改为"fromdata="+xml字符串?
    我晕了。那边是xml形式接受的,xml外面还得包含一个参数?
    还是就是传2个字符串的值过去,一个值是参数,一个值是xml字符串?
      

  35.   

    还有就是我的post参数是应该加在 NameValuePair simcard = new NameValuePair("simcard","1330227");
    的哪个位置?是前面的"simcard"改为"fromdata",还是"1330227"改为"fromdata="+xml字符串?
    我晕了。那边是xml形式接受的,xml外面还得包含一个参数?
    还是就是传2个字符串的值过去,一个值是参数,一个值是xml字符串?
    1.client.getHostConfiguration().setHost(url)貌似也可以?如果里面是url,那么PostMethod post = new PostMethod("/simcard.php");应该怎么写,难道括号里为空?
    2.应该是有一个参数叫fromdata,这个参数的值为一个xml字符串,然后验证页面那边读取参数fromdata的值...
      

  36.   

    还有就是我的post参数是应该加在 NameValuePair simcard = new NameValuePair("simcard","1330227");
    的哪个位置?是前面的"simcard"改为"fromdata",还是"1330227"改为"fromdata="+xml字符串?
    我晕了。那边是xml形式接受的,xml外面还得包含一个参数?
    还是就是传2个字符串的值过去,一个值是参数,一个值是xml字符串?
    1.client.getHostConfiguration().setHost(url)貌似也可以?如果里面是url,那么PostMethod post = new PostMethod("/simcard.php");应该怎么写,难道括号里为空?
    2.应该是有一个参数叫fromdata,这个参数的值为一个xml字符串,然后验证页面那边读取参数fromdata的值...
    我哭了。你那就是字符串嘛。至于怎么解析xml那是那边的事了
    就是传两个字符串过去呗?
      

  37.   

    不懂你说的传两个字符串过去是什么意思,为什么会有两个字符串..我看了一些网上httpClient的例子,都是直接传xml字符串的,所以不是很清楚post的参数fromdata怎么传,难道是这样:NameValuePair fromdata=new NameValuePair("fromdata",xml字符串);?还是哪样?
      

  38.   

    不懂你说的传两个字符串过去是什么意思,为什么会有两个字符串..我看了一些网上httpClient的例子,都是直接传xml字符串的,所以不是很清楚post的参数fromdata怎么传,难道是这样:NameValuePair fromdata=new NameValuePair("fromdata",xml字符串);?还是哪样?

    你说的我也有点晕了。
    我说的两个字符串是一个参数,一个xml字符串的意思。。
    莫非单传一个xml文件过去就可以了?
    NameValuePair fromdata=new NameValuePair("fromdata",xml字符串);
    通过NameValuePair 这样也是添加多参的。
      

  39.   

    不是传xml文件,应该就是传xml格式的字符串,只不过给这个字符串加了一个对应的参数fromdata,,但是我这样做了以后验证那边的页面收不到我的xml字符串,是NameValuePair fromdata=new NameValuePair("fromdata",xml字符串);不对么?我贴下代码吧,实在是搞不懂..PostMethod pm=new PostMethod(url);
    NameValuePair fromdata=new NameValuePair("fromdata",data);
    pm.setRequestBody(new NameValuePair[]{fromdata});
    pm.setRequestHeader("Content-type","text/xml;charset=utf-8");
    HttpClient httpClient=new HttpClient();
    int result=httpClient.executeMethod(pm);
    String msg=new String(pm.getResponseBody());
    System.out.println(result);
    System.out.println(msg);
    pm.releaseConnection();
    跑起来后,我输入用户名和密码,但是结果那边提示没有输入任何参数,也就是说那边没有接收到xml字符串数据...ps:result值为200