网站首页  汉语字词  英语词汇  考试资料  写作素材  旧版资料

请输入您要查询的范文:

 

标题 jQuery中通过ajax调用webservice传递数组参数的问题实例详解
范文
    本文通过实例给大家详细介绍jQuery中通过ajax调用webservice传递数组参数的相关资料,需要的朋友可以参考下
    下面通过实例给大家说明比较直观些,更方便大家了解。
    本人的项目中通过jquery.ajax调用webservice.
    客户端代码如下:
    $.ajax({
    url: "test/xxx.asmx",
    type: 'POST',
    dataType: 'xml',
    timeout: ,
    data: { name: "zhangsan", tags: ["aa", "bb", "cc"] },
    error: function(xml) {
    alert(xml.responseText);
    },
    success: function(xml) {
    alert("OK");
    }
    });
    服务端代码如下:
    [WebMethod]
    public XmlDocument xxx(string name, string [] tags )
    { 
    return sth; 
    }
    总是抛出异常.
    问题出现在这里:
    下面是HTTP数据:
    POST http://xxx.com/xxx.asmx/xxx HTTP/1.1
    Host: center.cmis.htpc.com.cn
    Connection: keep-alive
    Content-Length: 55
    Cache-Control: max-age=0
    Origin: http://xxx.com
    User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.186 Safari/535.1
    Content-Type: application/x-www-form-urlencoded; charset=UTF-8
    Accept: application/xml, text/xml, */*; q=0.01
    Referer: http://xxx.com/xxx.aspx
    Accept-Encoding: gzip,deflate,sdch
    Accept-Language: zh-CN,zh;q=0.8
    Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
    name=zhangsan&tags%5B%5D=aa&tags%5B%5D=bb&tags%5B%5D=cc
    而它期望的格式是如下的:
    POST /xxx.asmx/xxx HTTP/1.1
    Host: xxx.com
    Content-Type: application/x-www-form-urlencoded
    Content-Length: length
    name=string&tags=string&tags=string
    比较上面粗体,post的数据除了问题. 正确的应该如下:
    name=zhangsan&tags=aa&tags=bb&tags=cc
    看来问题出在jquery.ajax上面了.见代码(jquery.1.8.3.js)
    function buildParams(prefix, obj, traditional, add) {
    var name;
    if (jQuery.isArray(obj)) { 
    // Serialize array item.
    jQuery.each(obj, function(i, v) {
    if (traditional || rbracket.test(prefix)) { 
    // Treat each array item as a scalar.
    add(prefix, v);
    } else {
    // If array item is non-scalar (array or object), encode its
    // numeric index to resolve deserialization ambiguity issues.
    // Note that rack (as of ..) can't currently deserialize
    // nested arrays properly, and attempting to do so may cause
    // a server error. Possible fixes are to modify rack's
    // deserialization algorithm or to provide an option or flag
    // to force array serialization to be shallow.
    //ytx 
    buildParams(prefix, v, traditional, add);
    //buildParams(prefix + "[" + (typeof v === "object" ? i : "") + "]", v, traditional, add);
    }
    });
    } else if (!traditional && jQuery.type(obj) === "object") {
    // Serialize object item.
    for (name in obj) {
    buildParams(prefix + "[" + name + "]", obj[name], traditional, add);
    }
    } else {
    // Serialize scalar item.
    add(prefix, obj);
    }
    }
    结论:
    出问题的代码在22行,我修改成21行那样就行了.
    不过,我对js/jquery都是一知半解的,希望不要引起别的后遗症,呵呵.
    以上所述是小编给大家介绍的jQuery中通过ajax调用webservice传递数组参数的问题实例详解的相关知识,希望对大家有所帮助
随便看

 

在线学习网范文大全提供好词好句、学习总结、工作总结、演讲稿等写作素材及范文模板,是学习及工作的有利工具。

 

Copyright © 2002-2024 cuapp.net All Rights Reserved
更新时间:2025/5/15 14:33:50