2015-03-27 4 views
0

Я использую jquery $ .when для вызова URL REST, который возвращает json.

Когда я выполняю $. Когда с одним параметром, я получаю другой объект в результате data1, чем когда выполняю несколько, хотя возвращаемые параметры должны быть независимыми.

<script> 
$(document).ready(function() { 

    fun1(1025); 
    fun2(1025); 

    function fun1(id) { 
     $.when(_restFun1(id), _restFun1(id)).done(function(data1, data2) { 
      console.log(data1); 
     }); 
    } 

    function fun2(id) { 
     $.when(_restFun1(id)).done(function(data1) { 
      console.log(data1); 
     }); 
    } 

}); 
</script> 

объекты, напечатанные на console.log, отличаются друг от друга, хотя две функции должны печатать один и тот же объект !.

ПРИМЕЧАНИЕ:

функция _restFun1 что-то вроде этого:

function _restFun1(id) 
{ 
    return $.ajax({ 
     url: "http://192.123.12.3/test.php?id="+id, 
     data: "", 
     dataType: 'json', 
     success: function (data1) { 
     } 
    }); 
} 

, который возвращает объект JSON, в одном случае я получаю объект JSON, как это, в случае многократного Я получаю объект с несколькими другими полями, такими как responseText, responseJSON, строка «success», а затем в массиве - реальная вещь JSON, в которой я нуждался.

+1

Какой выход вы ожидаете, и что выход вы получаете? Видя функцию '_restFun()', и вызываемый код на стороне сервера тоже может помочь. –

+0

Скопируйте/распечатайте выход журнала на вопрос, пожалуйста. –

ответ

2

Обратите внимание, не появляется совершенно ясно jQuery.when() documentation, чтобы возвращенная jQuery.ajax вызова возвращающей массив [responseText, textStatus, jqxhr] («успех»), или [jqxhr, textStatus, errorThrown] («ошибка»)

Если отложенный разрешено к одному значению, соответствующий аргумент будет придерживаться этого значения. В случае, когда параметр «Отсрочка» разрешен для нескольких значений, соответствующий аргумент будет представлять собой массив значений .

Ближайший пример демонстрации могли бы найти в документации

var d1 = new $.Deferred(); 
var d2 = new $.Deferred(); 
var d3 = new $.Deferred(); 

$.when(d1, d2, d3).done(function (v1, v2, v3) { 
    console.log(v1); // v1 is undefined 
    console.log(v2); // v2 is "abc" 
    console.log(v3); // v3 is an array [ 1, 2, 3, 4, 5 ] 
}); 

d1.resolve(); 
d2.resolve("abc"); 
d3.resolve(1, 2, 3, 4, 5); // returned as `array` at `.done()` 

См также

Ajax response has different format when used with JQuery when function

jquery when documentation for response and errors


Ответ будет array[responseText, textStatus, jqxhr], где responseText Отклик на сервере; textStatussuccess, error; jqxhr JQuery jqXHR объект

Попробуйте

function fun1(id) { 
    $.when(_restFun1(id), _restFun1(id)) 
    .done(function(data1, data2)) { 
    // `data[0]`, `data1[0]` should be `responseText` , `responseJSON`  
    console.log(data1[0], data2[0]); 
    }) 
} 
+0

Консольный журнал возвращает мой желаемый объект, но почему он содержится в новом массиве с именем 0 ?? где это задокументировано? и почему это поведение происходит только при передаче нескольких вызовов? – dendini

+0

См. Http://stackoverflow.com/questions/11456946/ajax-response-has-different-format-when-used-with-jquery-when-функция, http://stackoverflow.com/questions/17181839/jquery- когда-documentation-for-response-and-errors, – guest271314

+0

Хорошо нашел ответ благодаря вашим двум ссылкам, если бы вы могли немного рассказать о своем ответе, я мог бы принять его. – dendini

Смежные вопросы