структура coldfusion в аргументе функции

Я пытаюсь подключиться к facebook на стороне сервера, но SDK (получить его здесь) при условии, дает следующую ошибку:

Invalid CFML construct found on line 523 at column 78.
ColdFusion was looking at the following text:

{

И это не объясняет, почему он выдает эту ошибку. Я плохо разбираюсь в cfscript, поэтому я не знаю, использует ли sdk правильный синтаксис, но он выдает ошибку в этой функции в фигурных скобках структуры в аргументах функции:

private String function getUrl(String path = "", Struct parameters = {})
{
    var key = "";
    var resultUrl = "https://www.facebook.com/" & arguments.path;
    if (structCount(arguments.parameters)) {
        resultUrl = resultUrl & "?" & serializeQueryString(arguments.parameters);
    }
    return resultUrl;
}

Я думал, что использование sdk не составит труда, но, видимо, я что-то упускаю. Что я делаю неправильно?

Часть 2. Код теперь останавливается на:

for (var propertyName in arguments.properties) {
        httpService.addParam(type="formField", name=propertyName, value=arguments.properties[propertyName]);
    }

Вам не разрешено использовать цикл for в cfscript?


person dreagan    schedule 06.02.2012    source источник
comment
Вам удобнее использовать теги CF? Я преобразовал версию PHP из документов facebook в CFML, хотите, чтобы я опубликовал это?   -  person Kristian82    schedule 06.02.2012
comment
CF не позволяет устанавливать значения аргументов метода по умолчанию с использованием литеральной записи (массив или структура). Вы должны использовать structNew(), как указал Дункан.   -  person jalpino    schedule 07.02.2012
comment
@Kristian82: Если хотите поделиться, пожалуйста. Не потому, что мне удобнее работать с тегами, мне не стоит учиться работать со скриптом.   -  person dreagan    schedule 07.02.2012


Ответы (2)


Попробуйте structNew() или "#structNew()#" вместо {}

person duncan    schedule 06.02.2012
comment
structNew() помогает мне обойти ошибку (я обновил свой исходный пост), но теперь код зависает в другой строке SDK. Мне серьезно интересно, было ли это протестировано перед размещением в Интернете.. : \ Может ли кто-нибудь также протестировать SDK, чтобы убедиться, что я не делаю что-то ужасно неправильное..? - person dreagan; 07.02.2012
comment
Я предполагаю, что это должно быть «для (propertyName в arguments.properties)», НЕ «для (var propertyName в arguments.properties)» - person duncan; 07.02.2012
comment
Я думаю, что поддержка ключевого слова var, например. for (var foo in bar) был добавлен в CF 9.0.1 - person Jared Beck; 16.10.2012

Это должно работать для подключения к Facebook и получения токена доступа:

<cfset appID = ""/>
<cfset secret_key = ""/>
<cfset app_url = ""/>


<cfparam name="URL.Code" default="0">
<cfparam name="URL.state" default="0">
<cfparam name="SESSION.Redirect" default="0">
<cfset code_ = URL.Code>


<cfif code_ EQ "" OR code_ EQ 0>
<cfset SESSION.State = Hash(CreateUUID(),"MD5")>
<cfset dialog_url = "http://www.facebook.com/dialog/oauth?client_id=" & appID &      "&redirect_uri=" & app_url & "&scope=email,user_photos,publish_stream" & "&state=" &     SESSION.State>
<cflocation url="#dialog_url#" addtoken="no">
</cfif>

<cfif SESSION.State EQ URL.State>
<cfset token_url = "https://graph.facebook.com/oauth/access_token?client_id=" & appID & "&redirect_uri=" & app_url & "&client_secret=" & secret_key & "&code=" & code_>

<cfhttp url="#token_url#" result="AccessToken" method="GET">

<cfelse>
<p>The state does not match. You may be a victim of CSRF.</p>
</cfif>
person Kristian82    schedule 07.02.2012
comment
отлично, это помогло мне понять, что не так с файлами.. ^^ - person dreagan; 07.02.2012