簡體   English   中英

為什么我的AJAX代碼不起作用?

[英]Why isn't my AJAX code working?

我認為這應該是微不足道的,但是我根本無法弄清楚。 我正在通過發送AJAX請求並回顯從下拉菜單中提取的變量進行小型測試。

但是,它似乎並沒有執行任何操作。 我想知道是否有人可以幫助我指出問題所在?

以下是index.php的相關片段:

<html>
    <?php

    //create a drop down of available accounts
                echo 'Available Accounts: ';

                echo '<select name=dropAccounts class=dropAccounts>';
                //if there is at least one account available
                if (count($accsAvailable) > 0) {
                    echo '<option value=0>---Select an account---</option>'; //default option
                    foreach ($accsAvailable as $account) {
                        //populate from API
                        echo '<option value=' . $account->getId() . '>' . $account->getName() . '</option>';
                    }
                } else {
                echo '<option value=0>---No accounts---</option>'; //else if no accounts exist
            }
            echo '</select>';

            //for available webproperties
            echo '<br> Available Webproperties: ';
            echo '<select name=dropProperties class=dropProperties>';
            echo '<option selected=selected>---Select a webproperty---</option>';
            echo '</select>';

    ?>
</html>

要摘錄的片段,重要的是第一個下拉菜單稱為“ dropAccounts”。

這是我的JS腳本,用於處理'dropAccounts'上的onchange事件:

<script type="text/javascript">
    $(document).ready(function()
    {
        $(".dropAccounts").change(function()
        {
            var id=$(this).val();
            var dataString = 'id='+ id;

            $.ajax
            ({
                type: "POST",
                url: "propertyID.php",
                data: dataString,
                cache: false,
                success: function(html)
                {
                    $(".dropProperties").html(html);
                } 
            });

        });

    });
</script>

我最終打算使用從'dropAccounts'獲取的值填充第二個下拉菜單'dropProperties',但它甚至沒有在我的PHP腳本中回顯。

propertyID.php

<?php

if($_POST['id'])
{
    $accountID = $_POST['id'];
    echo $accountID;
}

?>

我正在關注在這里找到的教程: http : //www.9lessons.info/2010/08/dynamic-dependent-select-box-using.html

根據我所看到的問題是:

var dataString = 'id='+ id;
data: dataString

您需要通過以下方式發送數據;

data : {
         'id' : id
       }

並且它應該以正確的格式向您發送數據。

編輯:我添加此以澄清您的代碼看起來。

<script type="text/javascript">
    $(document).ready(function()
    {
        $(".dropAccounts").change(function()
        {
            var id=$(this).val();

            $.ajax
            ({
                type: "POST",
                url: "propertyID.php",
                data: {
                         'id' : id
                },
                cache: false,
                success: function(html)
                {
                    $(".dropProperties").html(html);
                } 
            });

        });

    });
</script>

您生成的html無效。 每個類和名稱都應在引號內。

更改您的index.php

像這樣:

<html>

    <?php

    //create a drop down of available accounts
    echo 'Available Accounts: ';

    echo '<select name="dropAccounts" class="dropAccounts">';
    //if there is at least one account available
    if (count($accsAvailable) > 0) {
        echo '<option value="0">---Select an account---</option>'; //default option
        foreach ($accsAvailable as $account) {
            //populate from API
            echo '<option value="' . $account->getId() . '">' . $account->getName() . '</option>';
        }
    } else {
        echo '<option value="0">---No accounts---</option>'; //else if no accounts exist
    }
    echo '</select>';

    //for available webproperties
    echo '<br> Available Webproperties: ';
    echo '<select name="dropProperties" class="dropProperties">';
    echo '<option selected=selected>---Select a webproperty---</option>';
    echo '</select>';

    ?>

</html>

您應該在ajax成功回調中添加:

$(".dropProperties").append(html);

這里有幾個問題!

為了便於閱讀和突出顯示語法(更不用說它會引起您的錯誤認識),您應該使用直接html輸出,而不是用php回顯它。

代替

echo '<select name=dropAccounts class=dropAccounts>';

嘗試

//End php parsing with a closing php tag
?> 
<select name=dropAccounts class=dropAccounts> 
<?php 
//Resume php parsing

這引起了人們對以下事實的關注:您沒有用引號將屬性值引起來

代替

<select name=dropAccounts class=dropAccounts>

引用該屬性很重要:

<select name="dropAccounts" class="dropAccounts">

接下來的事情是您嘗試使用以下代碼將服務器的輸出(原始STRING)插入到select元素中:

success: function(html) {
    $(".dropProperties").html(html);
} 

我相信這是您想要的:

success: function(html) {
    var newOption = $('<option value="' + html + '">' + html + '</option>');
    $(".dropProperties").append(newOption);
}

根據html規范,只有option元素應該是select元素的子元素。 為了將字符串添加到select元素中,我的代碼創建了一個新的option元素,將其文本設置為“ html”字符串,並將該option元素插入到select元素中。

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM