【问题标题】:How do I create an auto suggestion from a JSON API response?如何从 JSON API 响应创建自动建议?
【发布时间】:2013-07-02 04:03:20
【问题描述】:

亚马逊提供了一个 API 来获取输入字母的建议:

 http://completion.amazon.com/search/complete?search-alias=aps&client=amazon-search-ui&mkt=1&q=facebook

会给出回应:

["facebook",["facebook","facebook login","facebook.com","facebook credits","facebook gift card","facebook app","facebook messenger","facebook for dummies","facebook en español","facebook phone"],[{"nodes":[{"alias":"mobile-apps","name":"Apps for Android"},{"alias":"stripbooks","name":"Books"},{"alias":"textbooks-tradein","name":"Books Trade-in"},{"alias":"digital-text","name":"Kindle Store"}]},{},{},{},{},{},{},{},{},{}],[]]

如何使用 jQuery 或 PHP 从这个 JSON 响应创建自动建议?

【问题讨论】:

  • 您将需要解析此 JSON 响应并重新格式化它以使其符合 AutoComplete 小部件或使用 JSON 响应的自定义呈现方式。无论哪种方式,你都有一些工作要做。以下是来自 API 的一点参考:api.jqueryui.com/autocomplete,以及另一个来源:thebestsolution.org/customizing-the-jquery-ui-autocomplete
  • 我尝试了离线自动提示但不知道如何为json回复做?
  • 你是GET通过对亚马逊网站的 AJAX 调用来处理这个 JSON 数据,对吧?
  • 例如,你应该这样做来获取返回的数据:$.getJSON('http://completion.amazon.com/search/complete', {search-alias: 'aps', client: 'amazon-search-ui', mkt: '1', q: 'facebook'});

标签: php ajax json jquery


【解决方案1】:

如果您可以使用jqueryui-autocomplete 插件,那么您可以将其source 选项设置为一个函数,该函数在jqueryui-autocomplete 需要的格式和Amazon 提供的API 之间进行调解。以下内容应该能够根据您作为示例提供的 JSON 处理 JSONP 响应。通过向示例 URI 添加 callback GET 参数,您可以看到您提供的 API 端点支持 JSONP。例如,http://completion.amazon.com/search/complete?search-alias=aps&client=amazon-search-ui&mkt=1&q=facebook&callback=_ 返回包装在对_() 的调用中的数据。 jQuery 用它的dataType: 'jsonp' 选项掩盖了这一点。这是支持跨站点请求所必需的,因为您不太可能使用与完成 API 相同的 origin 为您的站点提供服务。

/*
 * Connect all <input class="autocomplete"/> to Amazon completion.
 */
jQuery('input.autocomplete').autocomplete({
  source: function(request, response) {
    jQuery.ajax('http://completion.amazon.com/search/complete', {
      /* Disable cache breaker; potentially improves performance. */
      cache: true,
      data: {
        client: 'amazon-search-ui',
        mkt: 1,
        'search-alias': 'aps',
        q: request.term
      },
      error: function() {
        /*
         * jquery-autocomplete’s documentation states that response()
         * must be called once per autocomplete attempt, regardless
         * of whether or not the background request completed
         * successfully or not.
         */
        response([]);
      },
      success: function(data) {
        /*
         * Amazon returns an array of different types of
         * autocomplete metadata. The second member is a
         * list of terms the user might be trying to type.
         * This list is compatible with jqueryui-autocomplete.
         */
        response(data[1]);
      },
      dataType: 'jsonp'
    });
  }
});

记得在 DOM 准备好后运行此代码,例如从 jQuery(document).ready(function() { statements_here(); }); 内部运行。

【讨论】:

  • 顺便说一句,使用这个api有什么限制吗?我的意思是,如果它从用户端运行它不应该,但如果任何 web 应用程序正在使用它,如果应用程序流行,它肯定会用完,对吧?
  • 虽然现在这是未来,但也许人们应该对 CORS 没问题?
猜你喜欢
  • 2022-07-30
  • 1970-01-01
  • 2015-02-11
  • 2017-12-12
  • 1970-01-01
  • 2018-02-13
  • 2020-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多