Bir
güncelleştirmek için nasıl

2 Cevap php

Ben küçük bir web uygulaması için CakePHP'ye kullanıyorum ve bir form sayfasındaki bir iş bir numarayı seçmek için açılan var. (Ben de varsayılan ajax yardımcı kullanarak açık ama ben onunla çok başarılı yoktu) jQuery kullanarak açılan seçilen iş sayısına göre iki metin alanları güncelleştirmek istiyorum.

İşte benim jQuery parçacığını bulunuyor:

<script>
    $(document).ready(function() {
        $('#job_id').change(function() {
            $.post('/surveys/jobdetails', {id: $(this).attr('id')});
        })
        .change();
    });
</script>

jobdetails Ancak, açılan değerini değiştirdiğinde denilen almaz geçirilen iş kimliği dayalı mevcut iş alır benim denetleyicisi bir yöntemdir. Ben. Yazı yerine bir uyarı işlevi yerine denedim ve o çalıştı, böylece Onchange doğru denir ediliyor.

İşte <div> Ben güncellemeye çalışıyorum bulunuyor:

echo "<div id='job_details'>";
echo $form->label('jobtitle', 'Job Title');
echo "<input type='text' name='jobtitle' id='jobtitle'>";
echo $form->label('department', 'Department');
echo "<input type='text' name='department' id='department'>";
echo "</div>";

Ben ajax çağrısından döndürülen iş için gelen değer olarak her metin alanının değerini ayarlamak istiyorum. Orada gerçekten iyi jQuery ve CakePHP belgelerin bir çok şey var fakat ben oldukça ben yapmaya çalışıyorum ne kapsar şey bulamadı. Herkes yanlış ne yapıyorum görebilir miyim? CakePHP ile bir div güncelleştirmek için ajax kullanmak için daha iyi bir yolu var mı?

2 Cevap

Şu anda, AJAX isteği "/ anketler / jobdetails" URL vurur görünür, ama sonuçlar hiçbir şey yapmaz. Bunu gibi, AJAX isteği bir geri eklemek gerekir:

$(document).ready(function() {
    $('#job_id').change(function() {
        $.post('/surveys/jobdetails', {id: $(this).attr('id')},
        function(result) {
            $('#job_id').html(result);
        });
    })
    .change();
});

load() hatta daha da kolaylaştıran, bir URL içeriğini alma ve seçilen eleman uygulayarak denilen jQuery bir kolaylık fonksiyonu da vardır:

$(document).ready(function() {
    $('#job_id').change(function() {
        $(this).load('/surveys/jobdetails', {id: $(this).attr('id')});
    })
    .change();
});

CakePHP denetleyicisi böyle bir şey bakmak gerekiyor:

function jobdetails() {
    // get the data however you want
    // $_POST['id'] will have the job_id
    print json_encode(array(
        'jobtitle' => $jobtitle,
        'department'=>$dept
    ));
    exit;
}

Sonra $.post aslında güncelleyecek alanlara bir geri eklemek gerekir:

$(document).ready(function() {
    $('#job_id').change(function() {
        $.post('/surveys/jobdetails', {id: $(this).attr('id')}, function(json) {
            // now that we are in the callback,
            // the variable json is an object
            // with the values we passed above
            // so we can update the fields with the new values
            $('#jobtitle').val(json.jobtitle);
            $('#department').val(json.department);
        });
    })
    .change();
});

Ben de size AJAX taleplerinin ilerleme görmek ve sunucu onun dönen düşünüyorum ne dönen emin olun böylece Firebug gibi bir araç almak öneririz. Bu test ve yol kolay AJAX ile ilgili bir şey hata ayıklama yapar.

Bence bu güncellemek için tüm DIV çıktısı daha zarif olduğunu, ancak bu yol gitmek istiyorsanız sadece .load ne istediğinizi elde etmek için jQuery kullanmak istiyorsunuz.