You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

包裹eBay API请求代码至jQuery事件后出现_cb_findItemsByKeywords未定义错误

解决eBay API回调函数在jQuery事件内失效的问题

嘿,我来帮你搞定这个问题!你遇到的Uncaught ReferenceError: _cb_findItemsByKeywords is not defined报错,其实是JSONP跨域请求的典型坑——咱们来拆解下原因,再给你两个可行的解决方案:

为什么会报错?

eBay的Finding Service用的是JSONP实现跨域请求,原理是动态创建一个<script>标签,服务器返回的内容是回调函数调用(比如_cb_findItemsByKeywords(返回的数据))。这个回调函数必须在全局作用域里,因为浏览器执行这个script标签时,是在全局上下文里找这个函数的。

而你把_cb_findItemsByKeywords函数放进了$(document).ready()的button点击回调里,这时候函数是局部作用域(属于点击事件的回调函数内部),全局上下文根本找不到它,自然就报错了。

方案1:把回调函数放到全局作用域(最简单)

直接把回调函数定义在全局,这样JSONP返回的script就能轻松找到它:

// 全局定义回调函数,让JSONP能找到它
function _cb_findItemsByKeywords(data) {
  // 这里放你原来eBay示例里的处理逻辑
  console.log('获取到eBay数据:', data);
  // 比如解析商品列表、渲染到页面等操作
}

$(document).ready(function(){ 
  $('button').click(function(){ 
    // 这里放eBay的API请求代码(动态创建script标签的部分)
    var scriptTag = document.createElement('script');
    scriptTag.src = 'http://svcs.ebay.com/services/search/FindingService/v1?OPERATION-NAME=findItemsByKeywords&SERVICE-VERSION=1.0.0&SECURITY-APPNAME=你的APPID&keywords=iphone&callback=_cb_findItemsByKeywords';
    document.body.appendChild(scriptTag);
  }); 
});

方案2:临时挂载到全局(避免全局污染)

如果不想把函数暴露在全局,也可以在点击事件里临时把函数挂载到window对象上,请求完成后再删掉它:

$(document).ready(function(){ 
  $('button').click(function(){ 
    // 定义回调函数
    function handleEbayResponse(data) {
      // 处理返回的数据
      console.log('获取到eBay数据:', data);
      // 请求完成后移除全局的函数,避免污染全局作用域
      delete window._cb_findItemsByKeywords;
    }
    // 临时把函数挂载到全局window上,用eBay要求的回调函数名
    window._cb_findItemsByKeywords = handleEbayResponse;
    
    // 发起API请求
    var scriptTag = document.createElement('script');
    scriptTag.src = 'http://svcs.ebay.com/services/search/FindingService/v1?OPERATION-NAME=findItemsByKeywords&SERVICE-VERSION=1.0.0&SECURITY-APPNAME=你的APPID&keywords=iphone&callback=_cb_findItemsByKeywords';
    document.body.appendChild(scriptTag);
  }); 
});

补充:为什么原示例能直接运行?

因为eBay给的示例代码里,_cb_findItemsByKeywords是直接定义在全局作用域的(没有嵌套在任何函数里),所以JSONP返回的script执行时能直接找到这个函数。你把它放进jQuery的事件回调后,函数变成了局部变量,就找不到啦。

内容的提问来源于stack exchange,提问作者user9494275

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:29:15