Javascript 易趣API的JS功能范围
这里是初学者。ebay网站提供了使用javascript发送api请求的示例代码。代码是开箱即用的,但当我将整个代码包装在以下内容中时,代码会中断:Javascript 易趣API的JS功能范围,javascript,scope,callback,ebay-api,Javascript,Scope,Callback,Ebay Api,这里是初学者。ebay网站提供了使用javascript发送api请求的示例代码。代码是开箱即用的,但当我将整个代码包装在以下内容中时,代码会中断: (文档).ready(函数(){ (“按钮”)。单击(函数(){ //(此处为EBay示例代码) }); }); 谷歌chromes控制台说我的错误是: Uncaught ReferenceError: _cb_findItemsByKeywords is not defined at http://svcs.ebay.com/services/s
(文档).ready(函数(){
(“按钮”)。单击(函数(){
//(此处为EBay示例代码)
}); });代码>
谷歌chromes控制台说我的错误是:
Uncaught ReferenceError: _cb_findItemsByKeywords is not defined
at http://svcs.ebay.com/services/search/FindingService/v1?OPERATION-NAME=findItemsByKeywords&SERVICE-VERSION=1.0.0&SECURITY-APPNAME=micahelr-layitont-PRD-f51ca6568-6366e278&GLOBAL-ID=EBAY-US&RESPONSE-DATA-FORMAT=JSON&callback=_cb_findItemsByKeywords&REST-PAYLOAD&keywords=accord&paginationInput.entriesPerPage=5&itemFilter(0).name=MaxPrice&itemFilter(0).value=30&itemFilter(0).paramName=USD&itemFilter(1).name=ListingType&itemFilter(1).value(0)=AuctionWithBIN&itemFilter(1).value(1)=FixedPrice:1:5
(anonymous) @ svcs.ebay.com/services/search/FindingService/v1?OPERATION-NAME=findItemsByKeywords&SERVICE-VERSION=1.0.0&SECURITY-APPNAME=micahelr-layitont-PRD-f51ca6568-6366e278&GLOBAL-ID=EBAY-US&RESPONSE-DATA-FORMAT=JSON&callback=_cb_findItemsByKeywords&REST-PAYLOAD&keywords=accord&paginationInput.entriesPerPage=5&itemFilter(0).name=MaxPrice&itemFilter(0).value=30&itemFilter(0).paramName=USD&itemFilter(1).name=ListingType&itemFilter(1).value(0)=AuctionWithBIN&itemFilter(1).value(1)=FixedPrice:1
我想到的是,回调函数的作用域不正确。我将.ready()
和.click()
语句移动到脚本标记中的许多不同位置,试图在不完全理解如何解决问题的情况下解决问题。我试着阅读有关函数作用域的内容,但它似乎是我无法理解的东西。以下是嵌入JS代码的mt HTML文件的内容:
<html>
<head>
</head>
<body>
<button>click</button>
<script>
$(document).ready(function() {
$('button').click( function() {
var urlfilter = "";
item_MaxPrice = Number(document.getElementById('pagePrice').innerHTML);
inputKeywords = 'accord';
var filterarray = [ {"name":"MaxPrice", "value":item_MaxPrice, "paramName":"USD"}, ];
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">
for (var i = 0; i < items.length; ++i) {
var item = items[i];
html.push('text here');};
document.getElementById("results").innerHTML = html.join("");};
// Generates an indexed URL snippet from the array of item filters
function buildURLArray() {
for(var i=0; i<filterarray.length; i++) {
var itemfilter = filterarray[i];
for(var index in itemfilter) {
if (itemfilter[index] !== "") {
if (itemfilter[index] instanceof Array) {
for(var r=0; r<itemfilter[index].length; r++) {
var value = itemfilter[index][r];
urlfilter += "&itemFilter\(" + i + "\)." + index + "\(" + r + "\)=" + value ;
}
}
else {
urlfilter += "&itemFilter\(" + i + "\)." + index + "=" +
itemfilter[index];
}}}}}
// Execute the function to build the URL filter
buildURLArray(filterarray);
var url = "http://svcs.ebay.com/services/search/FindingService/v1";
url += "?OPERATION-NAME=findItemsByKeywords";
url += "&SERVICE-VERSION=1.0.0";
url += "&SECURITY-APPNAME=micahelr-layitont-PRD-f51ca6568-6366e278";
url += "&GLOBAL-ID=EBAY-US";
url += "&RESPONSE-DATA-FORMAT=JSON";
url += "&callback=_cb_findItemsByKeywords";
url += "&REST-PAYLOAD";
url += "&keywords="+inputKeywords;
url += "&paginationInput.entriesPerPage=5";
url += urlfilter;
s=document.createElement('script'); // create script element
s.src= url;
document.body.appendChild(s);
document.write("<a href='" + url + "'>" + url + "</a>");
})});
</script>
</body>
<footer>©darnell cross 2018</footer>
</html>
点击
$(文档).ready(函数(){
$(“按钮”)。单击(函数(){
var urlfilter=“”;
item_MaxPrice=Number(document.getElementById('pagePrice').innerHTML);
inputKeywords='accord';
var filterray=[{“name”:“MaxPrice”,“value”:item_MaxPrice,“paramName”:“USD”},];
函数_cb_findItemsByKeywords(根){
var items=root.FindItemsByWordsResponse[0]。搜索结果[0]。项| |[];
var html=[];
html.push('
对于(变量i=0;i 对于(var i=0;i,希望这有助于您了解缩进级别的范围。通常,缩进时,您可以使用它来帮助您可视化范围级别。父范围中声明的变量可以在子范围中访问,但不能通过其他方式访问
<html>
<head>
</head>
<body>
<button>click</button>
<script>
$(document).ready(function() {
$('button').click(function() {
//start of scope
var urlfilter = "";
item_MaxPrice = Number(document.getElementById('pagePrice').innerHTML);
inputKeywords = 'accord';
var filterarray = [{
"name": "MaxPrice",
"value": item_MaxPrice,
"paramName": "USD"
}, ];
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">
for (var i = 0; i < items.length; ++i) {
//start of new scope (can access everything in parent scope but nothing in a scope that is further nested
var item = items[i];
html.push('text here');
//end of new scope
}; document.getElementById("results").innerHTML = html.join("");
};
// Generates an indexed URL snippet from the array of item filters
function buildURLArray() {
for (var i = 0; i < filterarray.length; i++) {
var itemfilter = filterarray[i];
for (var index in itemfilter) {
if (itemfilter[index] !== "") {
if (itemfilter[index] instanceof Array) {
for (var r = 0; r < itemfilter[index].length; r++) {
var value = itemfilter[index][r];
urlfilter += "&itemFilter\(" + i + "\)." + index + "\(" + r + "\)=" + value;
}
} else {
urlfilter += "&itemFilter\(" + i + "\)." + index + "=" +
itemfilter[index];
}
}
}
}
}
// Execute the function to build the URL filter
buildURLArray(filterarray);
var url = "http://svcs.ebay.com/services/search/FindingService/v1";
url += "?OPERATION-NAME=findItemsByKeywords";
url += "&SERVICE-VERSION=1.0.0";
url += "&SECURITY-APPNAME=micahelr-layitont-PRD-f51ca6568-6366e278";
url += "&GLOBAL-ID=EBAY-US";
url += "&RESPONSE-DATA-FORMAT=JSON";
url += "&callback=_cb_findItemsByKeywords";
url += "&REST-PAYLOAD";
url += "&keywords=" + inputKeywords;
url += "&paginationInput.entriesPerPage=5";
url += urlfilter;
s = document.createElement('script'); // create script element
s.src = url;
document.body.appendChild(s);
document.write("<a href='" + url + "'>" + url + "</a>");
})
//end of button scope
});
</script>
</body>
<footer>©darnell cross 2018</footer>
</html>
点击
$(文档).ready(函数(){
$(“按钮”)。单击(函数(){
//范围的开始
var urlfilter=“”;
item_MaxPrice=Number(document.getElementById('pagePrice').innerHTML);
inputKeywords='accord';
变量过滤器阵列=[{
“名称”:“MaxPrice”,
“价值”:项目的最高价格,
“名称”:“美元”
}, ];
函数_cb_findItemsByKeywords(根){
var items=root.FindItemsByWordsResponse[0]。搜索结果[0]。项| |[];
var html=[];
html.push('
对于(变量i=0;i
未捕获引用错误:_cb_findItemsByKeywords未定义
出现此错误是因为Javascript找不到_cb_findItemsByKeywords函数
有什么问题
您正在创建一个脚本元素并将其添加到DOM中,该DOM将_cb_findItemsByKeywords函数作为URL中的回调函数
s=document.createElement('script');//创建脚本元素s.src=
url;document.body.appendChild;document.write(“+url+”)
现在,脚本将在全局上下文中运行,并且在那里找不到任何_cb_findItemsByKeywords函数,因为您在另一个函数中定义了它
$(文档).ready(函数(){…}
(请记住:每个函数都创建自己的上下文)
解决方案:
将_cb_findItemsByKeywords函数添加到窗口对象
window._cb_findItemsByKeywords = function() {...}
请正确缩进您的代码。这使关于范围的推理变得容易得多。我如何正确缩进javascript代码?我使用括号作为编辑器,看起来缩进是一致的