1

环境:Visual Studio 2012、MVC4、Razor、Internet 应用程序。我正在使用 eBay API,我想显示搜索结果 (JSON)。我有一个带有代码的视图页面...

<script>
function _cb_findItemsByKeywords(root)
{
  var items = root.findItemsByKeywordsResponse[0].searchResult[0].item || [];
  var html = [];
  html.push('<table width="100%" border="0" cellspacing="0" cellpadding="3"><tbody>');

  for (var i = 0; i < items.length; ++i)  
  {
    var item     = items[i];
    var title    = item.title;
    var pic      = item.galleryURL;
    var viewitem = item.viewItemURL;

    if (null != title && null != viewitem)
    {
      html.push('<tr><td>' + '<img src="' + pic + '" border="0">' + '</td>' + 
        '<td><a href="' + viewitem + '" target="_blank">' + title + '</a></td></tr>');
    }
  }
  html.push('</tbody></table>');
  document.getElementById("results").innerHTML = html.join("");
}
</script>

“.js”文件中的这一行:

var url = "http://ebay.com?..."

打开此查看页面时,如何自动从“.js”文件执行此 url?(此 url 向 Ebay 服务器发送请求并接收数据,将显示在此查看页面上。)

我会稍微改变一个问题...如果我从“查看”页面运行此代码,一切正常:

<script src=http://ebay.com?... </script>

如何从“.js”文件中接收这部分(“http://ebay.com?...”作为变量)?可能吗?

4

2 回答 2

1

例如,如果您只想发送请求,则可以将图像添加到 DOM 中src

如果您想从请求中接收数据,您将不得不进行 AJAX 调用。这在不同浏览器中的处理方式完全不同,因此使用框架(例如 jQuery)是一个好主意。

但是,由于 URL 与您的域不同,因此您将无法通过常规 AJAX 请求访问它。您必须参考所谓的 JSONP 请求。这要求您获取的文档以特定方式格式化以允许这样做。如果不是,由于Same-Origin Policy,JavaScript 根本不会允许这种交互。

JSONP 要求远程文档具有以下格式:

someCallbackFunction(javaScriptObjectWithData);

如果是这样,您将能够将该 URL 作为 DOM 包含一个脚本文件,src该文档的内容一旦获取,将立即在您的浏览器中执行。那时您应该已经指定了一个名称与文档中正在进行的回调匹配的回调函数(这通常是您可以通过原始请求中的查询字符串指定的内容)。

如果由于远程文档的格式,这些选项都对您不可用,那么您将不得不从服务器端请求文档。如果您自己无权访问服务器端环境,为了做到这一点,可以选择使用其他人的服务器。Yahoo 的自定义查询语言——YQL——可用于查询远程文档的内容,而 YQL通过 JSONP 获得,因此您可以通过它们转发您的请求。

请参阅这篇关于将 YQL 与 JSONP 结合使用的帖子


更新,现在您已经添加了更多数据,eBay API 可用于 JSONP,我认为这就是您正在寻找的解决方案。

于 2012-09-11T07:12:30.613 回答
0

解决...

<script src="/Scripts/ebay.js" type="text/javascript"></script>
<script>
    s = document.createElement( 'script' );
    s.src = url;
    document.body.appendChild( s );
</script>
于 2012-09-11T07:35:07.847 回答