簡體   English   中英

使用jQuery ajax和php的簡單hello世界不起作用

[英]Simple hello world using jQuery ajax and php doesn't works

我正在嘗試使用jQuery和Ajax創建一個簡單的hello world ,以從同一文件夾中的php獲取響應。

jQuery代碼是:

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
    <script type="text/javascript" src="http://netdna.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
    <script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>

    <link href="http://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.3.0/css/font-awesome.min.css"
    rel="stylesheet" type="text/css">
    <link href="http://pingendo.github.io/pingendo-bootstrap/themes/default/bootstrap.css"
    rel="stylesheet" type="text/css">

    <script type="text/javascript">
        function jsonIt(){
            var x = document.getElementById("input1").value; 
            var y = document.getElementById("input2").value; 

            var obj = '{'
                       +'"id" : "'+x+'",'
                       +'"name" : '+y+''
                       +'}';

            var person = {
                id:x,
                name:y
            }; 

            var str_json = JSON.stringify(person);

            $.ajax({
                type: 'get',
                url: 'a.php',
                dataType: 'text', 
                data: obj,
                success: function(data) {
                    alert(data);
                },
                error: function(e){
                        console.log(e.message);
                        //alert('error');
                    }
            });
            alert("Pause");
        }


    </script>
</head>

<body>
    <div class="section">
        <div class="container">
            <div class="row">
                <div class="col-md-12">
                    <form class="form-horizontal" role="form">
                        <div class="form-group">
                            <div class="col-sm-2">
                                <label for="inputEmail3" class="control-label">Email</label>
                            </div>
                            <div class="col-sm-10">
                                <input type="text" class="form-control" id="input1" placeholder="Email">
                            </div>
                        </div>
                        <div class="form-group">
                            <div class="col-sm-2">
                                <label for="inputPassword3" class="control-label">Password</label>
                            </div>
                            <div class="col-sm-10">
                                <input type="text" class="form-control" id="input2" placeholder="Password">
                            </div>
                        </div>
                        <div class="form-group">
                            <div class="col-sm-offset-2 col-sm-10">
                                <div class="checkbox">
                                    <label>
                                        <input type="checkbox">Remember me</label>
                                </div>
                            </div>
                        </div>
                        <div class="form-group">
                            <div class="col-sm-offset-2 col-sm-10">
                                <button type="submit" class="btn btn-default" onclick="jsonIt()">Sign in</button>
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
</body>
</html>

簡單來說,使用HTML進行調用:

<button type="submit" class="btn btn-default" onclick="jsonIt()">Sign in</button>

在同一文件夾中名為a.php的php是:

<?php echo "Helo world"; ?>

因此,當我單擊調用函數jsonIt()的按鈕時,將得到以下響應:“ [object XMLDocument]”,而不是Hello world。

可能是什么?

EDITED

修改后,標頭代碼將為:

<head>

    <script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
            <script type="text/javascript" src="http://netdna.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>

            <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
            <script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
        ...

         <script type="text/javascript">
            $(document).ready(function() {

                function jsonIt(){


                    $.ajax({
                        method: 'get',
                        url: 'a.php',
                        done: function(data) {
                            alert(data);
                        },
                        fail:function( jqXHR, textStatus ) {
                            console.log( "Request failed: " + textStatus );
                        }
                    });

                    //alert("Pause");
                }

                $(document).on('click', 'button[type="submit"]', function(e) {
                     e.preventDefault(); // prevents the default click action
                     jsonIt();
                });
            });


        </script>
    </head>

和按鈕的標記類似:

<button type="submit" class="btn btn-default" >Sign in</button>

但是它仍然返回“ [object XMLDocument]”,而不是“ Hello world”。

如果要在頁面頂部添加jQuery腳本,則需要用文檔就緒處理程序將它們包圍起來:

<script type="text/javascript">
$(document).ready(function() {
    function jsonIt(){
            $.ajax({
                method: 'GET',
                url: 'a.php',
                //url: 'http://practica00.tk/a.php',
                dataType: 'text'
            })
            .done(function(data) {
                    alert(data);
                })

            .fail (function( jqXHR, textStatus ) {
                    console.log( "Request failed: " + textStatus );
                });
        alert("Pause");
    }

    $(document).on('click', 'button[type="submit"]', function(e) {
        e.preventDefault(); // prevents the default click action
        jsonIt();
    });
});
</script>

准備好文檔的處理程序可確保在jQuery運行並附加其事件處理程序之前已加載所有DOM。 如果您沒有包裝准備好的文檔處理程序,則jQuery可能會嘗試將事件處理程序和方法附加到尚未加載到DOM中的項目

您實際上不應該使用內聯JavaScript來調用函數,尤其是因為您有可用的jQuery。 如果您要去,則仍需要阻止默認操作。

<button type="submit" class="btn btn-default" onclick="jsonIt(); return false;">Sign in</button>

如果您想使用jQuery進行點擊,則可以從按鈕中刪除嵌入式JavaScript,並將以下內容添加到jQuery代碼中:

 $(document).on('click', 'button[type="submit"]', function(e) {
     e.preventDefault(); // prevents the default click action
     jsonIt();
});

我不確定為什么要使用JSON字符串執行任何操作,因為您沒有在查詢中的任何地方使用它。 您永遠不會定義obj ,因此您不應該發送它。

編輯:我已經更新了我的答案,以反映使用的jQuery版本的更正確的AJAX返回方法。

棄用通知:從jQuery 1.8開始,不再使用jqXHR.success(),jqXHR.error()和jqXHR.complete()回調。 要准備將其最終刪除的代碼,請改用jqXHR.done(),jqXHR.fail()和jqXHR.always()。

如果您想做一個簡單的“ hello world”,那么在添加任何復雜性之前,應刪除所有偏離目標的代碼。

另外:要執行AJAX(因此需要執行PHP),您必須從運行中的Web服務器(本地主機或測試主機)執行代碼,在此處可以正確執行所有操作。

暫無
暫無

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

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