Посылка всей области формы к CFC асинхронно - PullRequest
0 голосов
/ 15 июля 2011

В настоящее время работает над попыткой выяснить асинхронную отправку в ColdFusion.У меня всегда есть проблемы с этим.У меня есть форма, которую я хочу отправить на удаленный CFC и получить какой-то ответ обратно.(В конце концов, эта форма будет иметь черновую функцию ...) Я знаю, как настроить каждую часть: форму и CFC.Моя проблема их соединяет !!!Был какой-то похожий пост по этому поводу, но ни один не предоставил достаточной информации .... по крайней мере для меня.

Форма:

<cfform action = "/cfc/request.cfc?method=updateRequest"  method = "post" name = "requestForm" id = "requestForm" enctype="multipart/form-data">
    ........<!-- Fields redacted -->

</cfform>

Метод CFC (это был всего лишь тест):

<cffunction name="updateRequest" access="remote" returntype="numeric">
        <cfargument name="form" type="struct" required="yes">
        <cfset var status = 0>

         <cfreturn status>
</cffunction>

Примечание: моя функция CFC настроена на удаленное и т. Д. И т. Д. И т. Д.

У меня есть моя форма, которая должна публиковаться в cfc, однако на самом деле идет к странице cfc.Я не хочу этогоЯ так расстроился, пытаясь использовать ajax с ColdFusion.Я готов прибегнуть к использованию JQuery для отправки.Я могу сделать это jQuery ... однако я не знаю, как получить поля в структуре.(Эта форма будет большой ...) Я хотел бы посмотреть, как отправить информацию о форме в виде структуры в ColdFusion или jQuery.Я хочу сохранить имена полей формы.

Даже если бы кто-то мог указать мне правильное направление ... это было бы здорово.Я пытался найти хороший учебник по этому вопросу в течение некоторого времени и не смог тоже.

Ответы [ 4 ]

1 голос
/ 19 июля 2011

Я думаю, у вас могут возникнуть проблемы с загрузкой всего, если вы хотите включить поле файла и его содержимое.Безопасность в браузерах не позволит вам прочитать файл (что вам нужно сделать, чтобы загрузить его содержимое с помощью ajax-запроса).Как уже упоминалось, использование serialize поможет вам получить другое содержимое формы, которое вы можете декодировать на сервере.если вам действительно нужно содержимое файла, вам может потребоваться отправить форму на скрытый iFrame, который не приведет к перезагрузке страницы, но должен отправить файл:

<form action="saveCode.cfc?method=safeDraft" method="post" enctype="multipart/form-data" target="upframe">
Say Something: <input type="text" name="foo"><br>
Add a File: <input type="file" name="myfile"><br>
<input type="submit">

<iframe src="initial.html" id="upframe" name="upframe"></iframe>

Я бы также настоятельно рекомендовал использовать Fiddler ( fiddler2.com ), чтобы посмотреть, что загружается, и убедиться, что вы декодируете то, что загружено правильно

Изменить: Переполнение стека скрыл мой тег iframe в примере выше.Я также протестировал пример в Chrome и FireFox на Mac, и он, кажется, работает нормально.

1 голос
/ 15 июля 2011

Если вы хотите передать элементы управления формой как структуру, я сначала попытался бы сериализовать элементы формы как строку json, а затем передать эту строку вашему веб-сервису. Затем из вашего веб-сервиса вы можете использовать DeserializeJSON (), чтобы преобразовать его обратно в структуру. Вот некоторый код, который должен вам помочь:

<script>
/* function prototype code modified from here: http://api.jquery.com/serializeArray/#comment-130159436 */
(function( $ ){
$.fn.serializeJSON=function() {
var json = [];
jQuery.map($(this).serializeArray(), function(n, i){
json.push('"' + escape(n['name']) + '":"' + escape(n['value']) + '"');
});
return '{' + json.join(',') + '}';
};
})( jQuery );

// make the request to your webservice
$.post('myComponent.cfc?method=updateRequest', { formJSON: $("#requestForm").serializeJSON()}, function () { /* handle response here. */ })
</script>

Затем в вашем CFC измените аргумент следующим образом:

<cffunction name="updateRequest" access="remote" returntype="numeric">
    <cfargument name="formJSON" type="string" required="yes">
    <cfset var formStruct = DeserializeJSON(arguments.formJSON)>
    <cfset var status = 0>

     <cfreturn status>
</cffunction>
1 голос
/ 16 июля 2011

Использование ColdFusion.Ajax.submitForm функция

<html> 
<head> 
<!--- The cfajaximport tag is required for the submitForm function to work 
            because the page does not have any Ajax-based tags. ---> 
<cfajaximport> 

<script> 
    function submitForm() { 
        ColdFusion.Ajax.submitForm('myform', 'asyncFormHandler.cfm', callback, 
            errorHandler); 
    } 

    function callback(text) 
    { 
        alert("Callback: " + text); 
    } 

    function errorHandler(code, msg) 
    { 
        alert("Error!!! " + code + ": " + msg); 
    } 
</script> 

</head> 
<body> 

<cfform name="myform"> 
    <cfinput name="mytext1"><br /> 
    <cfinput name="mytext2"> 
</cfform> 

<a href="javascript:submitForm()">Submit form</a> 

http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec22c24-7a01.html#WS71B55A73-D08F-47c7-B062-0543793B83A5

0 голосов
/ 15 июля 2011

Я думаю, что вы ищете тег и что-то вроде этого:

<cfajaxproxy bind="cfc:mycfc.myfunction(arg1={myform:myfield1},arg2={myform:myfield2})" />

Вы фактически не указываете действие в URL, как вы это сделали, вы вызываете его через прокси-сервер ajax.

Я думаю, это то, что вы пытаетесь, может быть неправильно, дайте мне знать:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...