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 に答える