Выберите поле, заполненное ответом json, используя jquery и coldfusion - PullRequest
1 голос
/ 27 марта 2012

Позвольте мне предварить этот вопрос. Я только начал использовать jquery, поэтому, пожалуйста, будьте добры.

Я искал этот ответ, и я не могу найти ничего, что работает, поэтому я задаю вопрос здесь.

У меня будет страница, содержащая группу полей выбора, которая будет заполнять список флажков в зависимости от того, какая опция в выборе выбрана. Я еще не зашел так далеко. Все, что я получил до сих пор, - это использование $.ajax для получения данных с сервера. Если я смотрю консоль Firebug, я вижу мою строку JSON.

{"DESCRIPTION":"Global Alpha I Benchmark","INCEPTION_DATE":"2004-02-29 00:00:00.0","DISCLOSURE":"","BENCHMARK_ID":"EBDVGA1INDEX"}

Вот код JavaScript:

    $(document).ready(function(){
    $(':input:visible:enabled:first').focus();
    $(function(){
        $("select#benchmarks").change(function(){
            var formval = {benchmarks:$(this).val()}
            $.ajax({
                type:"POST",
                data: formval,
                url: "request_processor.cfm",
                datatype: "json",
                success:$(function(response){alert(response);})

            });
        });
    });
});

HTML:

<cfform name="testForm">
<div align="center" id="databox">
    <cfselect id="benchmarks" name="benchmarks" query="getBenchmarks" queryPosition="below" value="benchmark_id" display="benchmark_id">
        <option value="">Please Select an ID...</option>
    </cfselect>
    <cfselect id="myselect" name="myselect"></cfselect>
</div>
<div id="contentdiv"></div>

Я что-то испортил, и теперь я даже не могу отобразить данные на экране, поэтому я не знаю, что делать. Любая помощь будет оценена. \

UPDATE:

@ Rob

Я добавил следующее к успешной части вызова ajax.

$.each(response,function(index){
options = "<option value='"+ response.description + "'>" + response.description + "</option>"
});
$("select#myselect").html(options);    

Теперь ничего не происходит! Нет ошибки JavaScript, нет ошибок в консоли Firebug.

Ответы [ 2 ]

2 голосов
/ 27 марта 2012
success:$(function(response){alert(response);})

должно быть

success:function(response){alert(response);}

$ (функция) - это ярлык для $ (документ) .ready (функция), так что вы фактически не связываете реальную функцию для обратного вызова ajax success.

Обновление: только что заметил, что у вас есть еще один ненужный $ ()

$(function(){
  $("select#benchmarks").change(function(){
  ...
)

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

1 голос
/ 27 марта 2012

Я вижу несколько проблем с вашим "каждым" кодом. Прежде всего, на основе вашей исходной строки JSON у вас есть один объект. Если вы не заключите его в [], .each будет выполнять итерацию по каждому свойству, например, описанию и дате начала. Если он заключен в квадратные скобки, он будет перебирать его, как если бы это был массив, по одному разу для каждого элемента в коллекции.

Итак, если вы передадите ему массив, ваш код должен выглядеть так:

var options = '';
$.each(response, function(){
    options += "<option value='"+ this.DESCRIPTION + "'>" + this.DESCRIPTION + "</option>";
});
$("select#myselect").html(options);

Я сделал два изменения. Сначала я объединяю строку параметров, чтобы все параметры были собраны. Я также использую «this», чтобы указать на правильный элемент в цикле.

Редактировать: я также изменил случай ОПИСАНИЕ. Я считаю, что он чувствителен к регистру.

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