0

私はjquerydeferredsの使い方を学ぼうとしています。

jsfiddleでhtmlを使用すると、then()ステートメントに出力されたときに、「success」とajaxリクエストによって返されるhtmlの2行を持つオブジェクトが返されます。

だから私がこれをするとき:

$(document).on('click', '.ajax', function() {
    $.when(ajax1('<p>first</p>'), 
           ajax2('<p>second</p>'), 
           ajax3('<p>third</p>'))
     .then(function(results1, results2, results3) {
        console.log(results1);
        $('.document').append(results1);
        $('.document').append(results2); 
        $('.document').append(results3);         
        alert('all ajax done');
    });
});

http://jsfiddle.net/loren_hibbard/AsgDz/

私はこれをコンソールで取得します:

["<p>first</p>", "success", 
Object
     abort: function ( statusText ) {
     always: function () {
     complete: function () {
     done: function () {
     error: function () {
     fail: function () {
     getAllResponseHeaders: function () {
     getResponseHeader: function ( key ) {
     overrideMimeType: function ( type ) {
     pipe: function ( /* fnDone, fnFail, fnProgress */ ) {
     progress: function () {
     promise: function ( obj ) {
     readyState: 4
     responseText: "<p>first</p>"
     setRequestHeader: function ( name, value ) {
     state: function () {
     status: 200
     statusCode: function ( map ) {
     statusText: "OK"
     success: function () {
     then: function ( /* fnDone, fnFail, fnProgress */ ) {
          __proto__: Object

どうすればそれだけにアクセスしてresponseText、1行おきに「成功」​​するhtml出力を回避できますか。

first
success
second
success
third
success

また、JSONデータで使用する可能性が高いので、それをどのように解析しますか。現在、関数では「ajax all complete」がthen()返されますが、コンソールで返されるオブジェクトは3つのオブジェクトのセットです。1つは解析されたjson文字列、もう1つは「成功」と言う迷惑な文字列、3つ目は解析されていないJSONオブジェクトであるresponseTextを含む大きなオブジェクトです。この最初のオブジェクトにアクセスして、解析した文字列を出力するにはどうすればよいですか? http://jsfiddle.net/loren_hibbard/jtvHf/1/

ありがとうございました!

4

1 に答える 1

2

簡単な修正 -- 各結果オブジェクトは、次の 3 つの項目を持つ配列です。

  1. 結果データ
  2. ステータス文字列 (「成功」)
  3. JQXHR オブジェクト。

などを使用results1[0]してデータを取得します。

 $('.document').append(results1[0].JSON);

デモ


(注、あなたのajax3関数にもタイプミスがあったようです -- 「タイプ」がhtml「post」ではなくに設定されていました。)

于 2012-11-16T19:46:32.617 に答える