jQuery Ajax и ColdFusion - PullRequest
       11

jQuery Ajax и ColdFusion

4 голосов
/ 05 марта 2010

Я пытаюсь отправить строку запроса на страницу ColdFusion. Я бы хотел, чтобы страница ColdFusion возвращала значение true или false в зависимости от того, успешно ли выполнен вход в систему.

Когда нажата моя кнопка входа в систему:

   function AttemptLogin(userName, password)
   {
       $.ajax({
                url: 'login.cfc&user=' + userName + '&' + 'password=' + password,
                success: function(data) {
                $('.result').val();
                 [Check for true or false here.]
                }
       });
   };

Моя страница ColdFusion аутентифицирует пароль и имя пользователя и возвращается, но я не знаю, как обработать то, что он возвращает? Я очень новичок в ColdFusion.

<cffunction "TryLogin" returntype="boolean">

</cffunction>

.. Я не уверен, как вернуть данные из функции после ее аутентификации, но в одиночку прочитал ее, когда она вернется. Кто-нибудь имел дело с этим раньше?

Спасибо, George

Ответы [ 3 ]

6 голосов
/ 05 марта 2010

Вы отправляете строку запроса или форму сообщения? Обычно логин это POST, а не GET. Но все равно.

Обычно мне нравится публиковать более структурированный ответ, чтобы у вас была возможность вернуть дополнительную информацию пользователю, например, сообщение об ошибке, но простой пример true / false приведен ниже. Вы можете просто дать методу атрибут удаленного доступа, например так:

<cfcomponent name="Login">
   <cfset variables.dsn = "mydb" />
   <cffunction name="tryLogin" access="remote" output="false" returntype="boolean">
      <cfargument name="username" type="string" required="true"/>
      <cfargument name="password" type="string" required="true"/>

      <cfset var loginQuery = "" />

      <cfquery name="loginQuery" datasource="#variables.dsn#">
         SELECT * 
         FROM users 
         WHERE 
            username = <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.username#"/> 
            AND 
            password = <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.password#"/>
      </cfquery>

      <cfif loginQuery.recordcount>
         <cfreturn true />
      <cfelse>
         <cfreturn false />
      </cfif>
   </cffunction>
</cfcomponent>

Теперь, когда у вас есть CFC, ваш базовый скрипт должен работать просто отлично, с некоторыми изменениями:

function AttemptLogin(userName, password)
   {
       $.ajax({
                url: 'login.cfc',
                data: {method: 'tryLogin', username: userName, password: password},
                success: function(data) {
                   if (data == true) { alert('true!');} else { alert('false!');}
                }
       });
   };

Как уже упоминалось в другом ответе, если вы возвращаете сложный тип данных, такой как структура или массив, вам нужно указать returnFormat 'json' и изменить аргумент данных следующим образом:

data: {method: 'tryLogin', returnFormat: 'json', username: userName, password: password}
0 голосов
/ 05 марта 2010

Вы можете использовать cfreturn из функции для возврата результата.

Ваш фрагмент становится примерно таким:

<cffunction name="TryLogin" returntype="boolean" output="false"> 
  <cfargument name="user" type="string" required="true" />
  <cfargument name="password" type="string" required="true" />

  <cfset var loggedIn = false />

  <!--- check the database, return a record that matches the details, etc --->
  <cfif query.recordCount eq 1>
    <cfset var loggedIn = true />
  </cfif>
  <cfreturn loggedIn />
</cffunction> 

В зависимости от типа переменнойвы возвращаетесь, вам может понадобиться указать returnFormat в вашем посте ajax.

0 голосов
/ 05 марта 2010

Я не знаю о бите холодного синтеза, но вы должны опубликовать эти данные, предпочтительно через SSL, jquery для публикации будет выглядеть так:

function AttemptLogin(userName, password)
{
   $.ajax({
            url: 'login.cfc'
            type: 'POST',
            data: "{'user':'" + userName + "', 'password':'" + password + "'}",
            success: function(data) {
              if(data === "true") //server returns simple "true" or an error message
                alert("Success")
              else
                alert(data); //the error message from a failed login
            }
   });
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...