2015-11-05 68 views
0

我有這些代碼:jQuery的/ Ajax的回報數據,但並不會提醒

show.php:

<div id="show" style="background-color: white; color: #2b2b2b "></div> 
<script> 

    $(document).ready(function(){ 
     $('#btnsearch').click(function(){ 
      var key = { 
       'command': 'search', 
       'data': $("#inputsearch").val() 
      }; 
      $.ajax({ 
       type: 'POST', 
       url: 'query.php', 
       data: key, 
       dataType: 'json', 
        success: function(msg){ 
         $('#show').html(msg); 
      } 
      }) 
     }); 
    }); 

</script> 

和query.php:

$command = $_SESSION['command']; 
if($command == 'search'){ 
    $db = Db::getInstance(); 
    $str = $_POST['data']; 
    $records = $db->query("SELECT * FROM m_cinfo LEFT OUTER JOIN m_jinfo ON m_cinfo.cinfo_id=m_jinfo.cinfo_id where fullName LIKE '%$str%'"); 

    //echo json_encode($records, JSON_UNESCAPED_UNICODE); 
    echo 'تست'; 
} 

Parrams和性反應是正確的並輸入文本+搜索發送到query.php和تست返回但沒有在我的div顯示。它甚至沒有提醒成功領域的任何事情。

  • 如果我去掉回波json_encode($記錄,JSON_UNESCAPED_UNICODE);,是正確的方式來檢索JSON數據?
  • 就像我想使用我的數據庫中的數據。我該怎麼辦?我得到JSON這樣的:

    [{"cinfo_id":"1","fullName":"علی علوی","phone":"09151234576","mail":"[email protected]","description":"در نمایشگاه آشنا شدیم","jinfo_id":"1","jobTitle":"شرکت","jobName":"بازرگانی","city":"مشهد"}] 
    

    和回顯,但是當我說

    $('#show').html(msg.fullName); 
    

    例如,什麼都不會顯示。

    在此先感謝。

    +0

    你誤解了這個選項'dataType'這是(根據文件)'那你期待回數據的類型從服務器'。所以你的PHP應該回顯/打印JSON,而不是期望來自javascript客戶端的JSON – devnull69

    +0

    或者我誤解了你......那麼你的問題'2.'的答案應該是否爲 – devnull69

    回答

    2

    這是因爲ajax預計json響應和query.php腳本不會返回json。 如果您將錯誤回調添加到您的ajax,您會看到它被觸發。

    $.ajax({ 
          type: 'POST', 
          url: 'query.php', 
          data: key, 
          dataType: 'json', 
          success: function(msg){ 
           $('#show').html(msg); 
          }, 
          error: function (err) { 
           console.log(err); 
          } 
    

    要在query.php解決這個問題,應該回送json_encoded字符串這樣

    echo json_encode(array('message' => 'تست')); 
    

    ,然後在成功回調,你可以這樣

    success: function(response){ 
          $('#show').html(response.message); 
    } 
    

    更新訪問信息:好吧,如果你的$ db->查詢方法返回json作爲字符串,那麼你可以做以下事情

    $records = $db->query("SELECT * FROM m_cinfo LEFT OUTER JOIN m_jinfo ON m_cinfo.cinfo_id=m_jinfo.cinfo_id where fullName LIKE '%$str%'"); 
    
    $decoded = json_decode($records, true); 
    
    echo json_encode($decoded); 
    

    請注意,您的查詢容易受到SQL injection的影響。您應該轉義$ str變量或使用預準備語句。例如,如果有人進入這個字符串在搜索領域也可能放下你的「m_cinfo」表

    somestring'; DROP TABLE m_cinfo; # 
               ^this will comment the rest of your query 
    
    +0

    ,它應該是'$ _POST [ 'command']'而不是'$ _SESSION ['command']'作爲'command'是POST-Request-Body的一部分 – devnull69

    +0

    啊,是的,你是對的。由於OP表示響應正在返回,所以我甚至懶得去看上面的代碼。 – memo

    +0

    謝謝你的工作。 現在,如果我想使用我的數據庫中的數據,我應該怎麼做? 我得到這樣的json: [{「cinfo_id」:「1」,「fullName」:「علیعلوی」,「phone」:「09151234576」,「mail」:「[email protected]。com「,」description「:」درنمایشگاهآشناشدیم「,」jinfo_id「:」1「,」jobTitle「:」شرکت「,」jobName「:」بازرگانی「,」city「:」مشهد「}] and echo但是當我說 $('#show')。html(msg.fullName);例如,什麼都不會顯示 – meph