环境:Visual Studio 2012,MVC4,Razor,Internet Application。 我正在使用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?..."
当我打开此View页面时,如何自动从“.js”文件中执行此URL? (此URL向Ebay服务器发送请求并接收数据,该请求将显示在此View页面上。)
我会稍微改变一个问题...... 如果我从View页面运行此代码,一切正常:
<script src=http://ebay.com?... </script>
如何从“.js”文件中接收此部分(“http://ebay.com?...”作为变量)?有可能吗?
答案 0 :(得分:1)
如果您只想发送请求,可以将图像添加到DOM,例如src
。
如果您想从请求中接收数据,则必须进行AJAX调用。在不同的浏览器中处理方式完全不同,因此使用框架(例如jQuery)是个好主意。
但是,由于URL与您的域不在同一个域,因此您将无法使用常规AJAX请求访问它。您必须引用所谓的JSONP请求。这要求您提取的文档以特定方式格式化以允许此操作。如果不是,由于Same-Origin Policy。
,JavaScript根本不允许此互动JSONP要求远程文档具有以下格式:
someCallbackFunction(javaScriptObjectWithData);
如果是,您可以将一个脚本文件包含在DOM中,并将该URL作为src
,一旦提取,文档内容将立即在您的浏览器中执行。那时你应该指定一个回调函数,其名称与文档中的回调相匹配(这通常可以通过原始请求中的查询字符串指定)。
如果您无法使用这些选项,由于远程文档的格式,您将不得不从服务器端请求文档。如果您自己无法访问服务器端环境,为了执行此操作,可以选择使用某些服务器。 Yahoo的自定义查询语言 - YQL - 可用于查询远程文档的内容,YQL 可通过JSONP获取,因此您可以通过它们转发您的请求。
See this post on using YQL with JSONP
更新,现在您已添加了更多数据eBay API is available for JSONP,我认为这是您正在寻找的解决方案。
答案 1 :(得分:0)
...解决
<script src="/Scripts/ebay.js" type="text/javascript"></script>
<script>
s = document.createElement( 'script' );
s.src = url;
document.body.appendChild( s );
</script>