2012-06-14 39 views
1

我正在使用一個簡單的eBay jQuery插件。它成功打電話。它返回一個結果。但是,當它試圖找到我的回調函數時,會收到「Uncaught ReferenceError:_cb_findItemsByKeywords is not defined」。ebay api jquery在回調中未捕獲的引用錯誤

(function($){ 

    $.fn.ebay_jQuery = function(options ) { 
     var settings = $.extend({ 
      rootURL : "http://svcs.ebay.com/services/search/FindingService/v1", 
      operationName : "findItemsByKeywords", 
      serviceVersion : "1.0.0", 
      securityAppName : "myApp", 
      globalID : "EBAY-US", 
      responseFormat : "JSON", 
      callback : "_cb_findItemsByKeywords", 
      keywords : "religious%20book", 
      entriesPerPage : "20" 
     }, options); 
     var html = []; 
     // Parse the response and build an HTML table to display search results 
     var _cb_findItemsByKeywords = function(root) { 
      var items = root.findItemsByKeywordsResponse[0].searchResult[0].item || []; 

      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('<div class="box item-box" style="position: absolute; opacity: 1; top: 0px; left: 240px; ">'+ 
         '<div class="item">'+ 
         '<div>'+ 
         '<div class="goods-pic">'+ 
         '<a href="' + viewitem + '" target="_blank">' + 
         '<img src="' + pic + '" border="0">'+ 
         '</a>'+ 
         '</div>'+ 
         '<p class="item-title" style="margin-top: 10px;">'+ 
         '<a href="' + viewitem + '" target="_blank">' + title + '</a>'+ 
         '</p>'+ 
         '<p class="item-price-fee clearfix"><span class="sale-price"> $38.5</span>&nbsp;&nbsp;/&nbsp;&nbsp; <span class="blue">0 bids</span></p>'+ 
         '<p class="clearfix"><span class="blue pull-left" style="color: #538dc2;">0 mins left</span></p>'+ 
         '<p><span class="blue">Buy it now ($52.5)</span></p>'+ 
         '<p><span class="pull-right">Portland, TN</span></p>'+ 
         '</div>'+ 
         '</div>'+ 
         '</div>'); 
       } 
      } 
     } 

     var constructRequest = function(){ 
       // Construct the request 
       url = settings.rootURL; 
       url += "?OPERATION-NAME="+settings.operationName; 
       url += "&SERVICE-VERSION="+settings.serviceVersion; 
       url += "&SECURITY-APPNAME="+settings.securityAppName; 
       url += "&GLOBAL-ID="+settings.globalID; 
       url += "&RESPONSE-DATA-FORMAT="+settings.responseFormat; 
       url += "&callback=_cb_findItemsByKeywords"; 
       url += "&REST-PAYLOAD"; 
       url += "&keywords="+settings.keywords; 
       url += "&paginationInput.entriesPerPage="+settings.entriesPerPage; 
       //url += urlfilter; 

       return url; 
      } 
      var submitRequest = function(){ 
       var url = constructRequest(); 
       // Submit the request 
       s=document.createElement('script'); // create script element 
       s.src= url; 
       document.body.appendChild(s); 
      } 


      // End _cb_findItemsByKeywords() function 

     return this.each(function() { 

      submitRequest(); 
      $(this).append(html); 
     }); 
    }; 
})(jQuery); 

<html> 
<head> 
    <title>eBay Search Results</title> 
    <script type="text/javascript" src="/js/jquery-1.7.1.min.js"></script> 
    <script type="text/javascript" src="/js/ebay_jQuery.js"></script> 
    <script> 
     $(document).ready(function(){ 
      $('#results').ebay_jQuery(); 
     }); 
    </script> 
</head> 
<body> 
<div id="main-content"> 
    <div class="container-fluid"> 
     <div class="row-fluid"> 
      <div class="span12"> 
       <div class="item-container clearfix" id="item-container" style="position: relative; height: 1204px; "> 

        <div id="results"></div> 

       </div> 
      </div> 
     </div> 
    </div> 
</div> 

</body> 
</html> 

回答

0

您的回調函數未在全局範圍中定義,因此調用腳本無法達到該回調函數。

您需要爲每個回調方法指定一個唯一的名稱並將其添加到窗口中。

var uniqueName = "_cb_" + $.now(); 
window[uniqueName] = function (root) { 
    /* your stuff */ 

    window[uniqueName] = null; 
} 

然後將該唯一名稱傳遞給ebay api,作爲該腳本的所需回調函數fn。

+0

感謝您的快速回復。給它一個鏡頭。 – Mars7272

2

您可以將ebay調用包裝在jquery ajax調用中,響應會自動鏈接到填充了根變量的_cb_findItemsByKeywords方法。

有一個例子頁:

<html> 
<head> 
<title>eBay Search Results</title> 
<script src="http://code.jquery.com/jquery-latest.js"></script> 
<style type="text/css">body { font-family: arial,sans-serif;} </style> 

    <script type="text/javascript"> 
    $(document).ready(function() { 

     $("#ebay").click(function(e){ 

      var url = "http://svcs.ebay.com/services/search/FindingService/v1?SECURITY-APPNAME=Reddeneg-2a4d-4b23-8d37-defc1bbb868f&OPERATION-NAME=findItemsByKeywords&SERVICE-VERSION=1.0.0&RESPONSE-DATA-FORMAT=JSON&callback=_cb_findItemsByKeywords&REST-PAYLOAD&keywords=termo&paginationInput.entriesPerPage=30"; 

      $.ajax({ 
      url: url, 
      dataType: "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> 

</head> 
<body> 
<h1>eBay Search</h1> 

<a id="ebay" href="#"> run Ebay Query</a> 

<div id="results"></div> 


</body> 
</html> 
0

答案提供alejo實際工作,但是我將修改它一下。 jQuery ajax調用支持dataType:'jsonp',它添加了'callback =?'默認爲url,並允許您將回調函數定義爲ajax調用的成功屬性。您還可以使用數據屬性來傳遞查詢參數

<html> 
<head> 
<title>eBay Search Results</title> 
<script src="http://code.jquery.com/jquery-latest.js"></script> 
<style type="text/css">body { font-family: arial,sans-serif;} </style> 
<script type="text/javascript"> 
$(document).ready(function() { 
    $("#ebay").click(function(e){ 
     var url = "http://svcs.ebay.com/services/search/FindingService/v1?SECURITY-APPNAME=Reddeneg-2a4d-4b23-8d37-defc1bbb868f&OPERATION-NAME=findItemsByKeywords&SERVICE-VERSION=1.0.0&RESPONSE-DATA-FORMAT=JSON&REST-PAYLOAD&paginationInput.entriesPerPage=30"; 
     $.ajax({ 
     url: url, 
     dataType: "jsonp", 
     data: {keywords: 'thermo'}, 
     success: function(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> 
</head> 
<body> 
<h1>eBay Search</h1> 
<a id="ebay" href="#"> run Ebay Query</a> 
<div id="results"></div> 
</body> 
</html>