Dieser Artikel gibt Ihnen eine detaillierte Einführung in jQuery über Ajax, um einen Webservice aufzurufen, um Array-Parameter anhand von Beispielen zu übergeben. Freunde in Not können sich darauf beziehen
Die folgenden Beispiele werden intuitiver und für jeden einfacher verstehen.
In meinem Projekt rufe ich Webservice über jquery.ajax auf.
Der Clientcode lautet wie folgt:
$.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"); } });
Der Servercode lautet wie folgt:
[WebMethod] public XmlDocument xxx(string name, string [] tags ) { return sth; }
wirft immer eine Ausnahme.
Das Problem tritt hier auf:
Hier sind die HTTP-Daten:
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
Und die Das erwartete Format lautet wie folgt:
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
Vergleicht man die Fettschrift oben, sollten die Daten im Beitrag mit Ausnahme des Problems wie folgt lauten:
name=zhangsan&tags=aa&tags=bb&tags=cc
Es scheint, dass das Problem vorliegt Liegt in jquery.ajax. Siehe den Code (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); } }
Das Obige habe ich für alle zusammengestellt. Ich hoffe, dass es in Zukunft für alle hilfreich sein wird.
Verwandte Artikel:
Der AJAX-Paging-Effekt ist einfach zu implementieren (grafisches Tutorial)
So lösen Sie das Problem der Ajax-Übergabe von Daten mit Sonderzeichen
Das obige ist der detaillierte Inhalt vonDas Problem der Übergabe von Array-Parametern durch Ajax-Aufruf von Webservices in jQuery (grafisches Tutorial). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!