2011-05-19 26 views
0

我正在編寫一個頁面,該頁面將打印成員的徽章標籤。這是一個DYMO標籤製作者,我正在使用他們的JavaScript標籤框架。將jquery.get()設置爲不起作用的變量

所有成員都與複選框一起列出,數據將被編碼爲值中的徽章。用戶將檢查他們想要打印徽章的成員,然後單擊打印。

該腳本將抓取選中的複選框,並將該值通過get請求傳遞給單獨的php文件,該文件將返回編碼的數據,並且它會這樣做。

要返回的數據是週期分隔的,我需要分割並將每個部分放在一個單獨的行上。問題是我似乎無法從get的範圍中獲取數據。

腳本的相關部分:

printButton.onclick = function() { 
    try { 
     printButton.disabled = true; 
     settings.currentPrinterName = printersComboBox.value; 
     var printer = printers[settings.currentPrinterName]; 
     if (!printer) 
      throw new Error("Select printer"); 
     var label = null; 
     if (printer.printerType == "LabelWriterPrinter") { 
      label = addressLabel; 
     } 
     if (!label) 
      throw new Error("Label is not loaded. Wait until is loaded or reload the page"); 
     var labelSet = new dymo.label.framework.LabelSetBuilder(); 
     var barcode 
     $("#memchk :checked").each(function(){ 
      var value = $(this).val(); 
      var barcode; 
      var record = labelSet.addRecord(); 
      $.get("http://ranch/sunrise/wolf/plugins/member_directory/views/barcode.php",{encString: value}, function(data){ 
       //alert(data.split(".")); 
       barcode = data.split("."); 
      }); 
      alert(barcode[0]); 
      record.setText("TEXT", barcode[0]); 
      record.setText("TEXT_1", barcode[1]); 
      record.setText("TEXT_2", barcode[2]); 
      record.setText("TEXT_3", barcode[3]); 
      record.setText("TEXT_4", barcode[4]); 
      record.setText("TEXT_5", barcode[5]); 
      record.setText("TEXT_6", barcode[6]); 
      record.setText("TEXT_7", barcode[7]); 
      record.setText("TEXT_8", barcode[8]); 
      var memName = value.split("^"); 
      record.setText("TEXT_9", memName[0]); 
     }); 
     //label.print(printer.name, null, labelSet.toString()); 
     saveSettings(); 
    } catch(e) { 
     printButton.disabled = false; 
     alert(e); 
    } 
    printButton.enabled = true; 
} 

我試過設置了進去每行文字,但它沒有考慮。 get中的警報顯示預期的數據,但如果我嘗試運行它,則表示條形碼未定義。如果我註釋掉get並將標籤的文本行設置爲靜態字符串,則它可以正常工作。

爲什麼我不能獲取數據?

回答

4

,而不是GET,試試這個:

var barcode = $.ajax({ 
     url: "http://ranch/sunrise/wolf/plugins/member_directory/views/barcode.php", 
     type: "GET", 
     data: {encString: value}, 
     async: false 
    }).responseText; 

,你就會有分配您的要求的條形碼,這:

 alert(barcode[0]); 
     record.setText("TEXT", barcode[0]); 
     record.setText("TEXT_1", barcode[1]); 
     record.setText("TEXT_2", barcode[2]); 
     record.setText("TEXT_3", barcode[3]); 
     record.setText("TEXT_4", barcode[4]); 
     record.setText("TEXT_5", barcode[5]); 
     record.setText("TEXT_6", barcode[6]); 
     record.setText("TEXT_7", barcode[7]); 
     record.setText("TEXT_8", barcode[8]); 

應該工作;)

+0

將「異步」設置爲false,因此jQuery將返回當前的XmlHttpRequest實例 – metaforce 2011-05-19 14:30:02

+0

B-E-A-utiful,謝謝。 – Ryan 2011-05-19 14:46:15

+1

這比解決方案更像是創可貼。關閉ajax上的異步排除了ajax的用途......這可能會導致應用程序性能下降,因爲它會鎖定,直到請求實例返回。 – 2011-05-19 15:09:07

3

get是製作AJAX獲取請求的簡單方法。 AJAX是異步的(這就是A代表的)。這意味着請求被髮送並且響應稍後回來。如果您希望在收到響應後執行,則您在get之後執行的所有操作都需要移入回調函數。

+0

http://api.jquery.com/jQuery。得到/ – epascarello 2011-05-19 14:25:51

+0

我已經看到了,並嘗試過,但如果我嘗試設置回調函數內的文本,它會完全忽略它們,即使我將它更改爲「hi」。 – Ryan 2011-05-19 14:30:49

2

不知道是什麼您正在使用的jQuery版本,但我會從這裏的文檔開始:

http://api.jquery.com/jQuery.get/

此外,這些都不是我的幻燈片(感謝丹赫伯登),但這裏是一個回調的一個很好的例子:

http://danheberden.com/presentations/deferreds-putting-laziness-to-work/#4

所以你要確保你調用函數來處理你的數據從你的回調函數(帶有條形碼的部分= data.split(「。」))...上面的幻燈片還展示瞭如何使用Deferred對象以更簡潔的方式鏈接多個回調。我建議你去通過這個和遞延對象的文件位置:

http://api.jquery.com/category/deferred-object/

總之,你應該能夠使用回調妥善解決你的問題,但對於一個更可讀的解決方案,做檢查出deferreds。

+0

這看起來非常有趣。在我把所有東西都運行起來之後,我會研究這個,謝謝。 – Ryan 2011-05-19 16:29:19