2010-03-04 3 views
4

Я использую следующую суму для вызова функции CFC:Как передать аргумент CFC через AJAX?

function loadQuery() { 
    $.get('QueryData.cfc',{},function(GetMyData){ 
    $("#content").html(GetMyData) 
     }) 
    return false 
    } 

$(document).ready(function() { 
    $("#loadLink").click(loadQuery) 
}); 

Это мой HTML:

<a href="" id="loadLink">Load It</a> 

<div id="content"></div> 

Я звоню следующий CFC:

<cffunction name="GetMyData" access="public" returntype="query"> 

    <cfargument name="RecordID" type="string" required="yes"> 

    <cfset var RecordData = ""> 

    <cfquery name="RecordData" datasource="MyDSN"> 
     SELECT 
      foo.RecordID, 
      foo.RecordName    
FROM 
      foo 
     WHERE 
      foo.RecordID = #ARGUMENTS.RecordID# ;   
    </cfquery> 

    <cfreturn RecordData> 

Проблема одна когда я вызываю CFC, появляется страница CFC; появляется описание CFC (после запроса пароля администратора). Я не хочу загружать QueryData.cfc; Я хочу выполнить функцию внутри QueryData.cfc.

Вторая проблема заключается в том, что я не могу понять синтаксис передачи аргумента методу CFC.

ответ

5

Вы можете сделать что-то подобное с помощью метода $ .get, но я обычно делаю что-то вроде этого:

$(document).ready(function() { 
    $("#loadLink").click(function(e) { 
     e.preventDefault(); 
     var recordata = $(this).attr("href").substring(1); //trim '?' char 
     $.ajax({ 
      type: "GET", 
      url: "QueryData.cfc?method=GetMyData", 
      data: recordata, 
      dataType: "html", 
      success: function(message) { 
       $("#content").html(message); 
      } 
     }); 
    }); 
}); 

Если данные для записи ID хранится где-то в DOM, как так:

<a href="?RecordID=#url.RecordID#" id="loadLink">Load Data</a> 
<div id="content"></div> 

Кроме того, не уверен, как он ведет себя с доступом = «public» - он все равно может работать, но, вероятно, это должен быть доступ = «удаленный» от вашей функции.

+0

nah, access = "public" не будет работать. – Henry

+0

@Henry: Но 'access =" remote "' будет. ;-) – Tomalak

+0

Я не понимаю, как заставить recordID быть динамичным. Например, я не могу сделать следующее: «data:« RecordID = «+ # URL.RecordID #» - каков был бы правильный способ обойти это? – Mohamad

1

Для чего вы хотите, вы бы хотели попробовать <cfdiv> или <cfajaxproxy>? Это намного проще.

Но чтобы ответить на ваш вопрос, то GET URL должен быть XXX.cfc?method=whatever&param=xyz

редактирования: кстати ваша функция должна иметь access="remote", и это не очень хорошая идея, чтобы вернуть объект запроса, если вы не используете <cfgrid>.

+0

Спасибо, Генри, я никогда не думал о и . У вас есть ссылки на примеры использования? – Mohamad

+0

http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec10e40-7ffe.html – Henry

+1

Если вы уже загружаете jQuery на странице, я предпочитаю использовать это только для того, чтобы избежать накладных расходов вторая библиотека ajax, введенная cfdiv. – Soldarnal

Смежные вопросы