php
  • javascript
  • jquery
  • ajax
  • json
  • 2011-10-18 88 views 0 likes 
    0

    在第一頁上我有這樣的功能:jQuery的AJAX JSON問題

    <script> 
    function update() { 
        $("#notice_div").html('Loading..'); 
    
    
        $.ajax({ 
        type: 'GET', 
        dataType: 'json', 
        data: latestid, 
        url: '2includejson.php?lastid='+ latestid + '', 
        timeout: 4000, 
        success: function(data) { 
    
    
         $("#cont_div").html(data); 
         $("#cont_div").clone().prependTo($("#newdiv")); 
         $("#notice_div").html(''); 
         $("#cont_div").html(''); 
         window.setTimeout(update, 4000); 
    
        }, 
        error: function (XMLHttpRequest, textStatus, errorThrown) { 
         $("#notice_div").html('Timeout contacting server..'); 
         window.setTimeout(update, 60000); 
        } 
    }); 
    } 
    $(document).ready(function() { 
        update(); 
    
    }); 
    </script> 
    

    而且一些PHP。

    所包含的文件:

    <? 
        header("Content-Type: application/json", true); 
    
        $la = $_GET['lastid']; 
        include ("../../setup.php"); 
    
        $jsonArray[] = array(); 
    
         $count = 1; // first message is the newest on load 
         $get = $DB->query("SELECT * FROM board WHERE id>'$la' ORDER BY id DESC LIMIT 5", __FILE__, __LINE__); 
        while ($msg = $DB->fetch_array($get)) 
        { 
    
        if($count == 1){ 
        $latestid = $msg['id']; // newest message - this I need to pass to the other page 
        } 
        $count++; 
    
        $jsonArray = "$msg[msg]"; 
        } 
        echo json_encode($jsonArray); 
        ?> 
    

    我只是想學習如何使用AJAX和jQuery。

    正如你看到的,我通過latestid爲JS變量通過URL 網址: '?2includejson.php lastid =' + latestid + '',

    我是否需要更新/包後從一個較新的值包括頁面,但我不知道如何去做。在使用json之前,我可以用javascript覆蓋它,但現在我不知道...新的值將會以最新的形式再次發佈。

    +0

    '成功:函數(數據){'< - 這裏的id在data.id,如果它從服務器傳遞 – Esailija

    +0

    小心SQL注入在這裏:$ la = $ _GET ['lastid'] ; – BiAiB

    回答

    3

    您可以聲明數組沒有[]

    $jsonArray = array(); 
    

    你也應該然後將數據以數組追加製作一個字符串代替:

    $jsonArray[] = $msg['msg']; 
    

    而在最後:

    $jsonArray['latestid'] = $latestid; 
    

    然後在JavaScript中,您應該聲明latestid

    var latestid; 
    

    而在ajax函數中,您應該只是將數據作爲對象傳遞,而不是像現在這樣做兩次。而剛剛更換latestid存在,這在JSON格式被退回:

    ... 
    data: {lastid: latestid}, 
    url: '2includejson.php', 
    timeout: 4000, 
    success: function(data) { 
        latestid = data.latestid; // update latestid 
        ... 
    } 
    ... 
    
    +0

    非常感謝。我不知道如何訪問包含文件中的傳遞信息 – domino

    +0

    @domino:PHP文件?它看起來像'$ msg'將包含每條記錄的數據庫值,所以如果你將它們附加到'$ jsonArray',你可以將它們傳遞給JavaScrpt。 – pimvdb

    +0

    是的,但我如何訪問曾經是「$ la = $ _GET ['lastid'];」在第二個文件中,因爲它不再與URL一起發送? – domino

    1
    success: function(data) { 
    

    在這裏data是一個JSON對象。所以你不能做$("#cont_div").html(data);你必須閱讀json然後把它寫入這樣的div;

    $.each(data,function(key,value){ 
        $("#cont_div").append(key + " "+ value); 
    }) 
    
    0

    試試這個

    success: function(data) { 
    
    
         $("#cont_div").html(data); 
         $("#cont_div").clone().prependTo($("#newdiv")); 
         $("#notice_div").html(''); 
         $("#cont_div").html(''); 
        latestid = data.latestid ; // update the value 
         window.setTimeout(update, 4000); 
    
        } 
    
    0

    您可能需要使用$ .parseJSON;

    假設服務器返回的形式{「ID」:「2」}的JSON,然後在成功的功能做

    success:function(data){ 
    var s=$.parseJSON(data); 
    alert(s.id)-->will alert 2 
    

    而且我不知道,如果你的服務器腳本返回正確格式化JSON。使用螢火蟲數字

    相關問題