Почему jQuery не получает возвращенную информацию о json из моего CFC ColdFusion в этом коде? - PullRequest
0 голосов
/ 05 августа 2010

У меня есть CFC, который циклически просматривает папку и удаляет любые файлы в указанной папке, что-то вроде функции очистки после загрузки и сохранения изображения. В том же CFC у меня есть функция, которая обновляет текст в базе данных. Функции бота запускаются через пост jQuery. Текстовая функция возвращает подтверждение моей функции jQuery, без проблем.

Но функция очистки не возвращает данные на мою страницу. Может ли кто-нибудь увидеть в моей кодировке явную ошибку, которая помешала бы функции очистки возвращать данные на мою страницу и выдавать подтверждение?

Я знаю, что CFC работает, потому что файлы удалены из папки, но он просто не возвращает «правильный» ответ.

Вот jQuery:

function rebinder(deleteImages){
    $('.editingFormField').attr('value', '');
    if ($('.edit').hasClass('selected')){
        $('.edit').removeClass('selected');
    }
    $('#imagePreview').attr('src', '');
    $('#et').dialog('close');
    $('#ei').dialog('close');
    if (deleteImages == 'yes'){
        $.post("cfc/engine.cfc?method=clearImages&returnformat=json", 
                    {},
                    function(ret) {
                        //Handle the result
                        alert(ret + "the Return");
                        if(ret == "true") {

                        } else {
                            alert("There was an error in the processing (files_no_del)");
                        }
                    });
        $.post("cfc/engine.cfc?method=clearThumbs&returnformat=json", 
                    {},
                    function(ret2) {
                        //Handle the result
                        if(ret2 == "true") {

                        } else {
                            alert("There was an error in the processing (thumbs_no_del)");
                        }
                    });
    }
    location.reload();
};

И ХФУ:

<cffunction name="clearImages" access="remote" output="false" returntype="boolean">
<cfset var deleteConfirm = "true">
<!--- Read Holding Directory --->
<cfdirectory
    action="list"
    directory="#destdir#"
    recurse="true"
    listinfo="name"
    name="qFile"
    />
  <!--- Loop through file query and delete files --->

<cfloop query="qFile">
<cffile action="delete" file="#destdir#/#qFile.name#">
</cfloop>
<cfreturn deleteConfirm>
</cffunction>

Ответы [ 2 ]

1 голос
/ 05 августа 2010

Код полностью функционален, за исключением размещения location.reload();. После того, как я переместил команду reload в раздел моего кода, который запускается при получении ответа от CFC, он работал нормально.Ник Крэйвер рассмотрел проблему в этом посте: Перезагрузка окна jQuery не позволяет работать после .

Стоит отметить, что комментарии Тони и Кена также помогли в диагностике проблемы.Запуск почтового URL подтвердил, что волшебство AJAX происходило, как и планировалось.

Вот исправленный код, который работает:

function rebinder(deleteImages){
    $('.editingFormField').attr('value', '');
    if ($('.edit').hasClass('selected')){
        $('.edit').removeClass('selected');
    }
    $('#et').dialog('close');
    $('#ei').dialog('close');
    $('#imagePreview').attr('src', '');
    if (deleteImages == 'yes'){
        $.post("cfc/engine.cfc?method=clearImages&returnformat=json", 
                    {},
                    function(ret) {
                        //Handle the result
                        if(ret == "true") {
                            location.reload();

                        } else {
                            alert("There was an error in the processing (files_no_del)");
                        }
                    });
    } else {
        location.reload();
    }
};

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

0 голосов
/ 05 августа 2010

Я только что пролистал ваш код, можете ли вы использовать функцию $ .getJSON () для вызова CFC, вы можете упомянуть метод, который вы хотите вызвать, и при желании передать аргументы методу.

$.getJSON('Some.cfc', {method: 'fetchImapStartMessages', arg1: 'Hello',
    returnformat: 'json' },
  function(returndata) {
    //some code here that renders the data
  }
}); 

и убедитесь, что вы установили атрибуты returnformat = "JSON" access = "remote" в вашем методе CFC. когда данные возвращаются из метода CFC, убедитесь, что вы используете serializeJSON (returndata). Это помогает?

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