javascript - eBay API 使用 Javascript 按关键字查找商品返回 'Uncaught TypeError'

标签 javascript html ebay-api

我是一名初级程序员,我正在尝试通过 Javascript 使用其 Finding API 从 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>

有两个警报:

  1. alert(url)返回了除 urlfilter 之外的所有内容是undefined
  2. alert("buildURLArray working");没有出现。

Eclipse 返回了行 document.body.appendChild(s); 的错误,表明它为空。

Uncaught TypeError: cannot call method 'appendChild' of null

大部分代码来自教程,我不知道为什么我没有得到相同的结果。

最佳答案

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

关于javascript - eBay API 使用 Javascript 按关键字查找商品返回 'Uncaught TypeError',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39306933/

相关文章:

c# - DateTime ParseExact 抛出异常与 hh vs HH

javascript - 为什么要在构造函数之外设置 React 组件的状态?

javascript - 避免弹出窗口标题上的 url

html - CSS :hover not working

python - 如何通过 Google App Engine 从 eBay Finding API 获取数据(项目)?

php - eBay API - 如何获取大件商品图片?

javascript - 谷歌图表 : Line Chart hAxis Labels centered

javascript - 获取 BLOB 的二进制内容

html - 雅虎移动 View 断字被删除/剥离

java - 从 java beans 生成 html - 在编译时