2016-04-13 37 views
0

如何在ColdFusion中執行AJAX請求?ColdFusion中的AJAX請求

我有我的javascript:

function getdata(){ 
    var formElements=document.getElementById("CFForm_1").elements;  
    var data=[]; 
    for (var i=0; i<formElements.length; i++){ 
     if(formElements[i].name == 'customersid') 
      data.push({'customersid':document.getElementById("customersid").value}); 
     if(formElements[i].name == 'customerstoid') 
      data.push({'customerstoid':document.getElementById("customerstoid").value}); 
    } 

    $.ajax(
    { 
     type: "get", 
     url: "components/BillingCalc.cfc", 
     data: { 
       method:"ajaxGetTotalCost", 
       data: data.join() 
      }, 
     dataType: "json", 
     success: function(objResponse){ 

     } 
    }); 
    } 

我的組件:

component displayName="Calc" { 

remote function ajaxGetTotalCost(data){ 
    data = deserializeJSON(arguments.data); 
    WriteDump(data); abort; 
} 

我收到錯誤:JSON解析失敗的人物2: 'O' 在[目標對象],[對象對象] 有誰知道如何在CF中做AJAX請求?

+0

'data:data.join()'不是你如何創建json。 Coldfusion將無法將其反序列化,就好像它是json一樣。 –

+0

如果你使用jQuery,你爲什麼使用'document.getElementById()'?使用jQuery來獲取這些值。 'data.push($('#customersid'))'我發現這是一個很好的工具,可以將表單數據輕鬆放入json中,https://github.com/macek/jquery-serialize-object –

回答

1

此功能:

remote function ajaxGetTotalCost(data){ 
data = deserializeJSON(arguments.data); 
WriteDump(data); abort; 
} 

是不完整的。它處於您必須從ColdFusion頁面調用它的階段,而不是使用JavaScript。這將使您能夠看到writedump(data)命令的結果,以確保它符合您的期望。你必須添加更多的代碼到函數中才能生成一個javascript可以接收的變量,然後將該變量返回給調用函數的任何東西。

+0

我修正了這個問題使用JSON.stringify(數據),但當我從CFC返回數據到AJAX時,我得到parsererror – Apprentice123456

+0

@ Apprentice123456 - 請更新您的問題並追加當前代碼和錯誤消息。 – Leigh

0

該問題與您通過方法傳遞的dataType屬性有關。 dataType: "json"表示您的AJAX請求預計會將JSON數據作爲響應。但在你的情況下,你只是簡單地返回DUMP的反序列化的JSON,這是HTML而不是JSON。所以如果你想讓它正常工作,那麼你需要從你的ColdFusion函數中返回JSON數據。你可以試試看看它是否有效。

remote function ajaxGetTotalCost(data){ 
    data = deserializeJSON(arguments.data); 
    return serializeJSON(data)); 
}