【问题标题】:Load API results through ajax通过ajax加载API结果
【发布时间】:2014-03-13 10:14:00
【问题描述】:

我想知道如何在响应到来时加载 API 结果。

similar functionality

我认为使用数据库中的 ajax 可以得到。 但这里来自 API(实时结果)SOAP API。

有什么建议吗?

编辑

我目前的ajax函数是

$.ajax({
    type: "get",
    url: "<?=base_url()?>search/showresults",
    cache: false,               
    data:datastring,
    beforeSend:function(){
           $('#resultloader').show();
    },
    success: function(response){
        $('#resultloader').hide(500);
        $('#showflightresults').html(response);
    },
    error: function(){                      
         //alert('Error while Sending request..');
    }
});

谢谢

【问题讨论】:

  • 您应该循环连接到您的数据源的函数。在 JS 中使用 setTimeout 功能。每个异步请求(例如 jquery $.ajax,都有回调函数参数数据 - 这是您使用的 API 的响应,可以在您的网站上使用)。
  • @masahuku 我已经编辑了我的问题检查它
  • @masahuku 你能举个例子吗

标签: jquery ajax jquery-load


【解决方案1】:

尝试将 dataType 设置为 xml 并将 processData 设置为 false 并检查。

$.ajax({
    type: "get",
    url: "<?=base_url()?>search/showresults",
    cache: false,               
    data:datastring,
    processData: false,
    dataType:"xml",
    beforeSend:function(){
           $('#resultloader').show();
    },
    success: function(response){
        $('#resultloader').hide(500);
        $('#showflightresults').html(response);
    },
    error: function(){                      
         //alert('Error while Sending request..');
    }
});

编辑:-

你需要遍历php数组。

var arrayFromPHP = <?php echo json_encode($arrayPHP) ?>;

$.each(arrayFromPHP, function (i, elem) {
    // do your stuff
});

【讨论】:

  • 你能举个例子吗
  • 实际上我正在做的是:我在搜索控制器中调用 showresults 方法,然后我请求 api 结果,resopnse 以 xml 格式出现并转换为 php 数组,然后加载视图。现在我必须做些什么改变?
  • @NareshKamireddy 那么你现在从 api 获取数据了吗?
  • 是的,我能够从 api 以 xml 格式获取数据,但将其转换为 php 数组,然后加载视图(Codeigniter)。
  • @NareshKamireddy 见编辑
【解决方案2】:

试试这个

formData = {
    param1: param1
}
$.ajax({
    type: "get",
    url: "<?=base_url()?>search/showresults",
    cache: false,               
    data: formData,
    dataType: "xml",
    beforeSend:function(){
           $('#resultloader').show();
    },
    success: function(data){
        $('#resultloader').hide(500);
        $('#showflightresults').html(data);
    },
    error: function(){                      
         //alert('Error while Sending request..');
    }
});

【讨论】:

  • 你能举个例子吗
  • 这个概念还是一样的。你可以在这里测试我的应用程序。 github.com/datomnurdin/service-finder-mobile
  • 你可以在本地运行,但是你需要使用ripple chrome扩展来允许外部网络服务
  • 我认为它是在我不明白的 java 中
【解决方案3】:

我所做的是将结果处理并存储在服务器上的后台线程中,该线程从消息队列中读取。在我们的例子中,这是针对保险报价的。随着每个承运人的保险报价完成,其保费将存储在我们的数据库中。

在客户端,我们使用计时器循环调用服务器。见Ben Alman - doTimeout

您可以在Autoquoter.com 看到这一点。只需使用伊利诺伊州邮政编码并输入一些虚拟信息即可获得报价(例如,邮政编码=60010)。您可以查看我们客户端代码的源代码。

这是我们的服务器端代码。每条消息都是一个xml序列化的保险公司。

           var queue = new QueueManagerSoapClient("QueueManagerSoap");
            var messages = queue.RemoveAll(session.Id);
            if (messages.Any())
            {
                var serial = new XmlSerializer(typeof(Carrier));
                foreach (var message in messages)
                {
                    var carrier = serial.Deserialize(new StringReader(message)) as Carrier;
                    found = carrier != null;
                    if (found)
                    {
                       session.Carriers.Add(carrier);
                    }

                }
                session.SaveChanges();                    
            }
            return View("ResultView",session.Carriers);

更新:

要完成这项工作,需要三个组件。

首先,您需要在加载网页时启动异步请求。此请求将加载执行搜索的页面。它应该在收到结果时将结果存储到您的数据库中,或者将它们添加到消息队列服务中。您需要将搜索标记为已完成。

<%
    var wc = new WebClient();
    wc.DownloadStringAync(new Uri("http://baseurl/search/submitrequest"));
%>

其次,向您的网页添加一个计时器,它会定期(例如每 10 秒)执行一次 ajax 加载

var interval = setInterval(function() {
                  $('#resultsDiv').load("/search/showresults");
               },10000);

最后,当所有结果都存储在数据库中时,您需要终止间隔。您可以在搜索结果页面的底部添加类似的内容。

<% if ( isFinished ) { %>
    <script type="text/javascript">
         interval.stop();
    </script>
<% } %>

【讨论】:

  • 如何让它为我所用>
  • 我正在编辑我的答案以更详细地描述这一点@user123456789
猜你喜欢
  • 1970-01-01
  • 2012-11-01
  • 1970-01-01
  • 2014-10-09
  • 2017-07-19
  • 2011-07-14
  • 1970-01-01
  • 2016-04-16
  • 1970-01-01
相关资源
最近更新 更多