1

可能重复:
不确定变量未定义的原因。可能的范围问题?

我很抱歉这个糟糕的标题,但我只是不知道还能怎么称呼它。我希望我的破解代码能够提供足够的信息。(请随意大笑并指着我,但不要忘记在你做的时候提供一些建设性的东西。)

第 24、27、31 和 43 行是我的问题所在。第 27 行包含我期望的数据(第 26 行显示我期望的数据)。但是,我试图在第 24 行将该信息返回给 fetchResults,这显然不会发生:fetchResults 是空的。

我相信这是因为第 27 行将结果返回给第 24 行的匿名函数,但从那里它无处可去。

第 43 行是我计划使用结果的地方。(是的,我手动添加了行号。)

1 $(document).ready(function() {
2 
3   // Fetch XML generic fetch format
4   function genericFetch(entityType, fieldA, fieldB, valueX)
5   {   
6       function onFetchError(xhr, status, errorThrown)
7       {
8           var errormsg = $(xhr.responseXML).find('Message').text();
9
10          alert('CrmFetchKit-Error occured: ' +  errormsg);
11      }
12
13      var fetchxml = ['<fetch version="1.0" output-format="xml-platform" mapping="logical">',
14                      ' <entity name="' + entityType + '">',
15                      '  <attribute name="' + fieldA + '" />',
16                      '  <attribute name="' + fieldB + '" />',
17                      '  <filter type="and">',
18                      '   <condition attribute="' + fieldA + '" operator="eq" value="' + valueX + '" />',
19                      '  </filter>',
20                      ' </entity>',
21                      '</fetch>'].join('');
22
23      // Action: load the account with a certain name
24      var fetchResults = CrmFetchKit.Fetch(fetchxml).then(function (results) {
25          /* success handler */
26          alert("results: " + JSON.stringify(results, null, 4));
27          return results;
28      }, onFetchError);
29      
30      alert("fetchResults: " + JSON.stringify(fetchResults, null, 4));
31      return fetchResults;
32  }
33
34
35  $('#ati_ittestingbutton2').click(function(){
36      var entityType = "product";
37      var fieldA = "productnumber";
38      var fieldB = "name";
39      var valueX = "SL64030";
40      
41      var fetchResults = genericFetch(entityType, fieldA, fieldB, valueX);
42      
43      alert("JSON: " + JSON.stringify(fetchResults, null, 4));
44      alert("fetchRes: " + fetchResults[0]['attributes']['productnumber']['value']);
45  });
46 });
4

1 回答 1

1

必须同意最初的评论回复——这里和其他地方有很多变化——但这可能对你没有帮助,除非你知道你在找什么。

所以...抱歉,如果这是吸鸡蛋 101 但是..

您为获取数据而调用的函数是异步操作的,即,一旦被调用,它会将控制权交还给调用它的代码并开始执行它的操作 - 当它返回时,世界已经继续前进'不要再等待它了 - 那是 ajax 中的'a',这是我们大多数人都犯的错误(我知道我无论如何都做了......)。

有几种方法可以解决这个问题。您可以更改为同步操作,但这是一件坏事——它违背了 ajax 的目的,并会导致天空下雨鱼和其他天启的预兆。但这并不能阻止我们时不时地这样做……

更好的方法是调整您的程序流程,以便从成功或完整处理程序中调用结果处理代码。

于 2013-01-29T03:42:04.643 回答