需要帮助关注Ebay API按关键词查找项目

时间:2016-09-03 12:33:52

标签: javascript html ebay ebay-api

您好我是初学程序员,我正在尝试使用特定关键字使用他们的Finding API在我的混合移动应用程序中使用Javascript查找来自Ebay的项目。我跟着this really clear guide但我没有得到任何东西出现在我的结果div中。我也试过在网站上运行确切的代码,但仍然没有结果。我还在现场获得并输入了正确的生产appID。

以下是代码:

<script>                    
                        var url = "http://svcs.ebay.com/services/search/FindingService/v1";
                        url += "?OPERATION-NAME=findItemsByKeywords";
                        url += "&SERVICE-VERSION=1.0.0";
                        url += "&SECURITY-APPNAME=sample-sample-PRD-89a6113e8-f7a52044";
                        url += "&GLOBAL-ID=EBAY-US";
                        url += "&RESPONSE-DATA-FORMAT=JSON";
                        url += "&callback=_cb_findItemsByKeywords";
                        url += "&REST-PAYLOAD";
                        url += "&keywords=harry%20potter";
                        url += "&paginationInput.entriesPerPage=3";
                        url += urlfilter;
                        alert(url);
                         // Submit the request
                        s=document.createElement('script'); // create script element
                        s.src= url;

 // Error received on the line below, "uncaught typeerror: cannot call method 'appendChild' of null"
                        document.body.appendChild(s);

                        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("");
                        }  // End _cb_findItemsByKeywords() function

                     // Create a JavaScript array of the item filters you want to use in your request
                     var filterarray = [
                          {"name":"MaxPrice",
                           "value":"25",
                           "paramName":"Currency",
                           "paramValue":"USD"},
                          {"name":"FreeShippingOnly",
                           "value":"true",
                           "paramName":"",
                           "paramValue":""},
                          {"name":"ListingType",
                           "value":["AuctionWithBIN", "FixedPrice"],
                           "paramName":"",
                           "paramValue":""},
                          ];

                    // Define global variable for the URL filter
                     var urlfilter = "";

                    // Generates an indexed URL snippet from the array of item filters
                     function  buildURLArray() {
                        alert("buildURLArray working");
                       // Iterate through each filter in the array
                       for(var i=0; i<filterarray.length; i++) {
                         //Index each item filter in filterarray
                         var itemfilter = filterarray[i];
                         // Iterate through each parameter in each item filter
                         for(var index in itemfilter) {
                           // Check to see if the paramter has a value (some don't)
                           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];
                             }
                           }
                         }
                       }
                     }  // End buildURLArray() function

                     // Execute the function to build the URL filter
                     buildURLArray(filterarray);

                    </script>

HTML:

<h1>eBay Search Results</h1>

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

有两个警报,alert(url)返回除urlfilter为'undefined'和alert(“buildURLArray working”)之外的所有内容;没出现。 Eclipse返回了行document.body.appendChild(s);的错误,表明s为null。大多数代码来自教程,我不知道为什么我得不到相同的结果。

1 个答案:

答案 0 :(得分:1)

在URL构造代码中,由于解释器的顺序性,urlFilter没有被定义;作业没有被提升,即用简单的话说,你不能在现在使用它的未来价值。所以只需从var URL = ...(第1行)开始剪切代码,直到document.body.appendChild(s);并将其粘贴到最后(在buildURLArray(filterarray)之后;)在您的脚本标记内。现在urlFilter将获得一些值,然后将在URL构造中使用。