2

我正在使用 YUI3 IO Utility 提交带有文件的表单。来自服务器的响应包含 HTML,但在请求对象上访问时会被剥离。

var form = Y.one('form');
Y.io(form.get('action'), {
    method: form.get('method'),
    form: {
        id: form,
        upload: true
    },
    on: {
        complete: function(id, request) {
            // The server returns a response like <div>response</div>
            console.log(request.responseText); 
            // All HTML is stripped so it just prints 'response' to the console
        }
    }
});

这被认为是默认行为吗?我几乎不敢相信不可能获得完整的响应内容......服务器还将内容类型标头正确设置为“text/html”。

任何帮助表示赞赏!谢谢!

4

2 回答 2

1

我刚刚看了 YUI3 的源代码。在https://raw.github.com/yui/yui3/master/src/io/js/io-upload-iframe.js中负责请求对象的几行是:

_uploadComplete: function(o, c) {
    var io = this,
        d = Y.one('#io_iframe' + o.id).get('contentWindow.document'),
        b = d.one('body'),
        p;

    if (c.timeout) {
        io._clearUploadTimeout(o.id);
    }

    try {
        if (b) {
            // When a response Content-Type of "text/plain" is used, Firefox and     Safari
            // will wrap the response string with <pre></pre>.
            p = b.one('pre:first-child');
            o.c.responseText = p ? p.get('text') : b.get('text');
            Y.log('The responseText value for transaction ' + o.id + ' is: ' +     o.c.responseText + '.', 'info', 'io');
        }
        else {
            o.c.responseXML = d._node;
            Y.log('The response for transaction ' + o.id + ' is an XML     document.', 'info', 'io');
        }
    }
    catch (e) {
        o.e = "upload failure";
    }

    io.complete(o, c);
    io.end(o, c);
    // The transaction is complete, so call _dFrame to remove
    // the event listener bound to the iframe transport, and then
    // destroy the iframe.
    w.setTimeout( function() { _dFrame(o.id); }, 0);
},

因此,只要响应包含“正文”节点,它就会将正文内容作为“文本”返回。

o.c.responseText = p ? p.get('text') : b.get('text');

恕我直言,如果有 body 节点,就没有机会获得 innerHTML。我决定创建一个自定义的 IO Upload Iframe 模块,该模块添加了一个名为“responseHTML”的附加属性,以及 body 节点的 innerHTML。

您可以从 Pastebin 获取源代码:http: //pastebin.com/WadQgNP2

于 2012-12-21T17:49:48.967 回答
0

http://yuilibrary.com/yui/docs/io/#the-response-object

responseXML属性可能包含您要查找的内容。如果这不能帮助您尝试更改console.log(request.responseText);console.log(request);通过调试器(例如 Firebug)中的属性来查找包含您需要的数据的属性。

请记住,通常所有调用的属性...Text都只会返回某些内容的文本内容,完全没有 XML 代码。

于 2012-12-21T17:31:29.963 回答