переменная не передается при вызове через cfajaxproxy в функцию - PullRequest
0 голосов
/ 25 мая 2011

Я обнаружил, что этот вопрос задавался ранее , но в нем содержались плохие примеры и нет правильных ответов, поэтому я здесь, чтобы задать его еще раз.Сначала код:

HTML:

<td><input type="button" name="clear_#get_images.prdt_img_rel_ID#_cache" value="Clear Cache" onClick="clearCache('#get_images.images_name#');"/></td>

Прокси:

<cfajaxproxy cfc="/cfc/cloudfiles" jsclassname="proxy">

JavaScript:

<script type="text/javascript">
    var proxy = new proxy();
    function clearCache( objectName ) {
        proxy.setCallbackHandler( purgeResultsHandler );
        proxy.setErrorHandler( myErrorHandler );
        alert(objectName);
        proxy.purgeItemDirectly( objectName );
    }

    var purgeResultsHandler = function ( res ) {
        alert( res );
    }

    var myErrorHandler = function(statusCode, statusMsg) {
        alert('Status: ' + statusCode + ', ' + statusMsg);
    }
    </script>

ХФУ:

<cffunction name="purgeItemDirectly" access="remote" returntype="string" output="false">
    <cfargument name="container" type="string" required="false" default="content" />
    <cfargument name="objectName" required="true">
    <cfset var res = '' />

    <cfhttp method="DELETE" charset="utf-8" url="#variables.cdn_url#/#_encodeContainerName(arguments.container)#/#_encodeObjectName(arguments.objectName)#">
        <cfhttpparam type="header" name="X-Auth-Token" value="#variables.auth_token#" />
        <cfhttpparam type="header" name="X-Purge-Email" value="#Application.debuggingEmail#" />
    </cfhttp>

    <cfswitch expression="#ListFirst(cfhttp.statusCode, " ")#">
        ... code to iterate through responses ...           
    </cfswitch>
    <cfreturn res >
</cffunction>

Как видите, у меня есть предупреждение, чтобы проверить objectName в JS.На данный момент objectName существует.Тем не менее, он не существует, как только я попадаю в функцию в cfc.Я вставил текстовые значения для возврата в cfc, так что я знаю, что он вызывается правильно, я просто не могу передать в него значение (из переменной или просто из простой строки).

Заранее спасибо за вашепомощь.

Ответы [ 2 ]

1 голос
/ 06 июня 2011

В вашем javascript вы вызываете функцию с одним аргументом (proxy.purgeItemDirectly( objectName )).Ваш CFC определяет два аргумента: container и objectName.Таким образом, ваш javascript передает ваш аргумент objectname в контейнерный аргумент CFC.Вам необходимо убедиться, что вы передаете оба аргумента или изменили порядок аргументов в вашем CFC, чтобы он соответствовал тому, что вы ожидаете от вызовов JavaScript.

0 голосов
/ 09 сентября 2011

Я хотел бы добавить еще одну вещь, особенно если вы поддерживаете браузер IE. Ваш код в следующей строке будет ломаться в IE со стандартным сообщением об ошибке (что не полезно)

var proxy = new proxy();

Убедитесь, чтоизмените имя переменной на другое, например:

var proxy_ = new proxy();

Я столкнулся с вашим вопросом, пытаясь исправить свой, и нашел следующую ссылку полезной

Ссылка: http://www.coldfusionjedi.com/index.cfm/2008/7/1/IE-issue-with-AjaxProxy

...