未捕获的TypeError:无法读取属性'结果'未定义的

时间:2015-09-12 00:27:53

标签: javascript sharepoint-2013

我是JS的完整新手。尝试使用SharePoint REST API在页脚中显示链接列表。无论我做什么,都要继续犯这个错误。这是LoadFooterLinks(results.d.results);

这一行
function GetFooterLinks() {
    var url = _spPageContextInfo.siteAbsoluteUrl + "/_api/lists/getbytitle('Footer Links')/items/?$orderby=Display_x0020_on_x0020_Homepage";

    $.ajax({
        url: url,
        type: "GET",
        headers: {
            "accept": "application/json;odata=verbose",
        },
        success: function (results) {
            LoadFooterLinks(results.d.results);

        },
        error: function (error) {
              console.log("Error in getting List: " + listName); 
        }
    });
}

3 个答案:

答案 0 :(得分:0)

一些事情:

  1. 你怎么知道你有“错误”?
  2. 是Javascript Exception
  3. 错误或 Exception 是什么?
  4. 您如何知道错误与您的LoadFooterLinks()功能无关?
  5. 您的结果很可能不是您所期望的。你很明显:
    1. 成功建立连接并请求
    2. 但是,你无法确定会发生什么。它可能是:
      1. 空字符串
      2. 畸形
  6. 在大多数浏览器中点击 F12 会显示该浏览器的开发者模式/内置 JS控制台
  7. 下面的代码更改可以帮助您通过输出控制台进行调试。
  8. 关于代码更改的注意事项:

    1. 之间的区别:
      • 使用try-catch vs。
      • 捕获JavaScript 运行时异常/错误
      • "error"回调中输出字符串 变量 任意命名 failure $.ajax 对象
      • 的方法
    2. 将例外打印到控制台不需要console.err()
    3. 如果您想在控制台中显示字符串 错误,请使用console.err(),而不是console.log
    4. Null 对象,而不是数据类型原语,就像其他的一样JavaScript的。例如,
      • 布尔
      • 字符串
      • 未定义
      • 号码
    5. <小时/>

      新代码

      function GetFooterLinks() {
        var url = _spPageContextInfo.siteAbsoluteUrl +  
          "/_api/lists/getbytitle('Footer Links')/items/?  
          $orderby=Display_x0020_on_x0020_Homepage"
        ;
      
        $.ajax({
          url: url,
          type: "GET",
          headers: {
              "accept": "application/json;odata=verbose",
          },
          success: function (results) {
              if (!results) { // should handle null and empty strings
                try{
                  LoadFooterLinks(results.d.results);
                }
                catch (e){ // catch any JavaScript runtime exception (error)
                  console.log(e); // print the error to the console 
                                  // (hit F12 in most browsers to see 
                                  // the console BEFORE you refresh 
                                  // the page to run your code)
                }
              }
              else { 
                var msg = "The 'results' variable is ";
                var varType = typeof(results);
                if (varType == "object") {
                  msg += "NULL";
                } 
                else {
                  msg += varType;
                }
              }
          },
          error: function (error) {  
            // this 'error' variable can be named
            // anything you'd like and is a string 
            // description of the AJAX error.  
            // This description comes from $.ajax - 
            // which is part of jQuery (a JS library).
            // This "error" is not a native JS 
            // exception; therefore, you wouldn't 
            // use a TRY-CATCH.  Also, since it's 
            // only a string, if you want to show it 
            // as an error in the console, you should 
            // use `console.err`, not `console.log`.
            console.err("Error in getting List: (0)", error); 
          }
        });
      }
      

答案 1 :(得分:0)

你基本上做的是向&#34; / _ api / lists / getbytitle&#34;发出请求。方法。 当该方法返回响应时,它将作为名为&#34; results&#34;的对象执行此操作,正如您在&#34; success&#34;中所看到的那样。回调。

之后您正在阅读的是一个名为&#34; d&#34;并且在&#34; d&#34;你试图获得名为&#34;结果&#34;。

的财产价值

错误的含义是&#34; d&#34;未定义因此无法检索&#34;结果&#34;来自&#34; d&#34;。

我建议您查看对象内部的内容&#34;结果&#34;成功回调。

答案 2 :(得分:0)

对于SharePoint API结果,您需要解析JSON响应以将其转换为Javascript对象。我已经修改了你的代码,使其在这种情况下工作。

function GetFooterLinks() {
    var url = _spPageContextInfo.siteAbsoluteUrl + "/_api/lists/getbytitle('Footer Links')/items/?$orderby=Display_x0020_on_x0020_Homepage";

    $.ajax({
        url: url,
        type: "GET",
        headers: {
            "accept": "application/json;odata=verbose",
        },
        success: function (response) {
            var svcData = JSON.parse(response.data).d.results;
            LoadFooterLinks(svcData);

        },
        error: function (error) {
              console.log("Error in getting List: " + listName); 
        }
    });
}