0

我正在开发一个新网站,我想了解有关 JSON 的更多信息

该网站使用 jQuery 和 PHP

我有一个 jQuery 窗口,可以打开以添加新的菜单项或子菜单项。在这个窗口中还有一个带有添加的菜单和子菜单项的选择菜单。如果我添加了一个新项目而不是通过 ajax 请求将其添加到数据库中,当然我想尽量避免窗口刷新以在选择菜单中查看新添加的项目。

下一个代码触发我的窗口并将表单发送到 PHP 脚本。

` var SITE_URL = " http://martin.eenwittekerst.nl/ ";

$$.ready(function() {
$( "#dialog_add_menu" ).dialog({
    autoOpen: false,
    modal: true,
    width: 900,
    open: function(){ $(this).parent().css('overflow', 'visible');     
$$.utils.forms.resize() }
}).find('button.submit').click(function(){
    var $el = $(this).parents('.ui-dialog-content');
    if ($el.validate().form()) {

        var filename        = SITE_URL+"/admin/requests/menu.php";

        $.ajax
        ({
            type: "POST",
            url: filename,
            data: "do=add&"+$('form#menu').serialize()+"",

            success: function(msg)
            {
                document.getElementById("return_message").innerHTML = msg;
            }
        });

        var filename2        = SITE_URL+"/admin/reloads/menuItems.php";

        $.ajax({
             type: "GET",
             url: filename2,
             async: false,
             beforeSend: function(x) {
              if(x && x.overrideMimeType) {
               x.overrideMimeType("application/j-son;charset=UTF-8");
              }
         },
         dataType: "json",
         success: function(data){
            //do your stuff with the JSON data
            alert(data);
         }
        });

        $el.find('form')[0].reset();

        $el.dialog('close');
    }
}).end().find('button.cancel').click(function(){
    var $el = $(this).parents('.ui-dialog-content');
    $el.find('form')[0].reset();
    $el.dialog('close');;
});

$( ".open-add-menu-dialog" ).click(function() {
    $( "#dialog_add_menu" ).dialog( "open" );
    return false;
});
});

`

这包括我正在使用 JSON 进行测试的部分,我将再次将那段代码放在这里我试图做 JSON 的事情

` var filename2 = SITE_URL+"/admin/reloads/menuItems.php";

    $.ajax({
         type: "GET",
         url: filename2,
         async: false,
         beforeSend: function(x) {
          if(x && x.overrideMimeType) {
           x.overrideMimeType("application/j-son;charset=UTF-8");
          }
     },
     dataType: "json",
     success: function(data){
        //do your stuff with the JSON data
        alert(data);
     }
    });

`

最后我有一个没有给出任何响应的警报,甚至没有一个空警报

对不起,我在这方面是个菜鸟,但这是我第一次这样做。我已经对互联网上的内容进行了很多测试,但没有成功。

我的 PHP 代码中的代码非常简单,当然只用于测试

`

include(BASE_DOC."config.php");
include(BASE_DOC."classes/cls.db.php");

// Open the database connection
$cOpenDB  = new database_connection;
echo $cOpenDB->db_open(DB_HOST, DB_USER, DB_PASS, DB_TABLE);

$rows= array();

$sql    = mysql_query("SELECT * FROM menu_items") or die(mysql_error());
while($data = mysql_fetch_array($sql))
{
    $rows[] = $data['id'].",".$data['menu_item_name'];
}

echo json_encode($rows);
?>

`

现在我不明白如何从我的 PHP 脚本中获取 JSON 数组以及如何重建我的选择菜单的 HTML

这里我有我的窗口框的 HTML 代码来添加一个新的子菜单项

`

<!-- Add New Menu Item -->
<div style="display: none;" id="dialog_add_menu" title="Voeg een nieuw menu item toe">

    <fieldset id="menu">

        <form action="" class="full validate" id="menu">

            <div class="row">
                <label for="d2_menu_item">
                    <strong>Menu item naam</strong>
                </label>
                <div>
                    <input class="required" type="text" name="menu_name" id="menu_name" />
                </div>
            </div>
            <div class="row">
                <label for="d2_menu_item_alt">
                    <strong>Menu item alt</strong>
                </label>
                <div>
                    <input class="required" type="text" name="menu_alt" id="menu_alt" />
                </div>
            </div>
            <div class="row">
                <label for="d2_menu_item_sub">
                    <strong>Wordt dit een submenu item?</strong>
                </label>
                <div>
                    <select name="sub_option" id="sub_option">
                        <option value="n">Nee</option>
                        <option value="y">Ja</option>
                    </select>
                </div>
            </div>
            <div class="row" id="showMenuItems">
                <label for="d2_select_menu_item">
                    <strong>Selecteer een Menu item om een submenu item aan te koppelen</strong>
                </label>
                <div>
                    <div id="sub_menu_item_of">
                        <select name="sub_of" id="sub_of">
                            <option>Kies een menu item om een sub menu item aan te koppelen</option>
                            <?PHP
                            $cMenuItems = new menu();
                            echo $cMenuItems->menuItemsSelect("'menu_item_name','menu_item_alt'", "menu_items");
                            ?>                                                
                        </select>
                    </div>
                </div>
            </div>            
        </form>
        <div class="actions">
            <div class="left">
                <button class="grey cancel">Annuleren</button>
            </div>
            <div class="right">
                <button class="submit">Voeg menu item toe</button>
            </div>
        </div>

    </fieldset>
</div>
<!-- End if #dialog_add_menu -->    

`

这是第一次这样做真的很痛苦,但是如果有人可以帮助我解决这个问题,那么我将永远对你们所有人都非常满意!

如果您有任何问题或需要更多信息,请告诉我!

对不起,有时我的英语很差

亲切的问候马丁·梅杰

4

1 回答 1

0

调试 ajax 时,您必须确保 - ajax 请求已发送(检查您的 firebug 网络控制台) - php 确实返回了响应:在返回“json_encode($rows);”之前记录 - ajax 确实得到了正确的响应:在你的 ajax 调用中添加一个错误块:

$.ajax({
     ...
 error: function(response) {
     alert(JSON.stringify(response));
 }
});

还要检查你的 php.log 文件。

于 2013-07-22T13:54:18.037 回答