Как сделать несколько вызовов JSONP после одной отправки - PullRequest
1 голос
/ 08 марта 2011

Мне нужно создать виджет, в который можно было бы ввести какой-то текст, и мой сервер api.example.com может действовать и отвечать на него. Дело в том, что мне нужно сделать несколько звонков на мой сервер, прежде чем клиент получит окончательный «завершенный отчет». В настоящее время у меня есть следующий код.

$('#widget-form').submit(function() {
       var jqxhr = $.ajax({
            url: "/startanalyzerp?string=someexampletext",
            crossDomain: true,
            dataType: 'json'
        })
        .success(function(report) {
            alert("success"+report.id);
        })
        .error(function() {
            alert("error");
        })
        .complete(function() {
            alert("complete");
        });

То, что делает / startanalyzerp, возвращает уникальный идентификатор (целое число), который мне нужно передать последующим URL-адресам. У меня есть значение этого целого числа с report.id.

Я хочу иметь возможность вызывать другие функции crossdomain .

/step2?id=report.id
/step3?id=report.id
/step4?id=report.id

Я смог сделать это в том же домене, используя:

$.each(endpoint_array, function(index,value) {
    $.getJSON(value,function(report) {
}); 

Где endpoint_array - это простой массив в порядке того, какую конечную точку я хочу вызвать.

Мне бы очень хотелось помочь с этим, я уверен, что это что-то простое, что я скучаю.

Ответы [ 2 ]

1 голос
/ 08 марта 2011

Я вижу два варианта:

1 - выполнить только один вызов из Ajax и выполнить оставшуюся часть сервера с помощью команд в стиле HttpRequest / cURL, а затем отправить обратно «Завершенный отчет» в качестве ответа на первоначальный запрос Ajax.

2 - Вложить запросы ajax:

$('#widget-form').submit(function() {
       var jqxhr = $.ajax({
            url: "/startanalyzerp?string=someexampletext",
            crossDomain: true,
            dataType: 'json'
        })
        .success(function(report) {
            alert("success"+report.id);

               var jqxhr = $.ajax({
               url: "/startanalyzerp/step2?string=someexampletext",
               crossDomain: true,
               dataType: 'json'
           })
           .success(function(report) {
               alert("success"+report.id);
               //Call step 3 and so on
           })
           .error(function() {
               alert("error step 2");
            })
            .complete(function() {
                alert("complete step 2");
            });
        })
        .error(function() {
            alert("error");
        })
        .complete(function() {
            alert("complete");
        });
0 голосов
/ 06 ноября 2012

Имеет ту же проблему и предложение на стороне сервера Робса - это хорошо:)

Теперь был представлен jquery.when, где можно ожидать потерянные объекты. Читайте и это .

...