如何在一次提交后进行多个JSONP调用

时间:2011-03-08 01:40:42

标签: jquery json jsonp

我需要创建一个可以输入文本的小部件,我的服务器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");
        });

what / startanalyzerp做的是返回一个唯一的id(整数),我需要传递给后续的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 个答案:

答案 0 :(得分:1)

我可以看到两个选项:

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");
        });

答案 1 :(得分:0)

有相同的问题和Robs服务器端建议很好:)

现在引入jquery.when,可以等待延迟对象。 Read onthis