2016-08-30 123 views
0

所以,我有一個網格。如果用戶點擊輸入,gridbox會創建一行並加載用戶插入的數據。程序應該用這些數據運行一個mysql查詢,當用戶輸入時輸入。如何從ajax調用php返回值?

現在我有一個html頁面,其中javascript控制着網格框的操作。這js被稱爲當用戶點擊進入:

<script type="text/javascript" > 
    var dbs=0; 
    var val=[]; 
    function myFunction(e) { 
      if(e.keyCode == 13){ 
       var newId = (new Date()).valueOf(); 
       var value=gridbox.cells(1,0).getValue(); 
       if(value.substring(0,5)=="JrLbl") 
       { 
//the getfn(value) should returns the value of the mysql query 

        gridbox.addRow(newId,[value.substring(5,(value.indexOf(".")-4)),getfn(value)]); 
       } 
       val.push(value); 
       gridbox.cells(1,0).setValue(''); 
       gridbox.editCell(1,0); 
       dbs=dbs+1; 
      } 
    } 
    function upload(){ 
     var jsonString = JSON.stringify(val); 

      var jsonData = $.ajax({ 
       type: "POST", 
        url: "upload.php", 
        data: { 'data' : jsonString}, 
        dataType:"json", 
         async: false 
        }).responseText; 


     } 
    function getfn(str){ 
     xmlhttp = new XMLHttpRequest(); 
     var lblid= str.substring(str.indexOf(".")+6,str.length); 
     alert(lblid); 
     xmlhttp.open("GET","getfn.php?q="+lblid,true); 
     xmlhttp.send(); 

    } 

</script> 

而且在getfn.php運行MySQL查詢:

<?php 
header('Content-Type: text/html; charset=UTF-8'); 
require_once($_SERVER['DOCUMENT_ROOT']."globalfunctions/globalClasses.php"); 
require_once($_SERVER['DOCUMENT_ROOT'].'globalfunctions/GlobalParameters.php'); 
error_reporting (E_ALL^E_DEPRECATED); 
$q = intval($_GET['q']); 

$db_jira = new indotekDbConnection("jira"); 
      $sql=mysql_query("SELECT FajlNev 
       from indoteklabels 
       where ID='$q'"); 
      $FajlNev=mysql_fetch_row($sql); 
      return $FajlNev[0]; 
      $db_jira->Close(); 
      unset($db_jira); 
?> 

而且這又該何去何從標記位置

enter image description here返回數據

+1

可能重複的[如何從異步調用返回響應?](http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-調用) – eisbehr

+0

你可以在PHP中輸出所需輸出的echo語句,然後從你的函數返回它,如xmlhttp.responseText –

+0

@JekinKalariya是I1ve試過了,它不起作用 – Daniel

回答

0
function getfn(str){ 
     xmlhttp = new XMLHttpRequest(); 
     var lblid= str.substring(str.indexOf(".")+6,str.length); 
     //alert(lblid); 
     xmlhttp.open("GET","getfn.php?q="+lblid,true); 

     xmlhttp.responseType = 'text'; 

     xmlhttp.onload = function() { 
      if (xmlhttp.readyState === xmlhttp.DONE) { 
       if (xmlhttp.status === 200) { 
        var newId = (new Date()).valueOf(); 
        gridbox.addRow(newId,[str.substring(5,(str.indexOf(".")-4)),xmlhttp.response]); 
        gridbox.cells(1,0).setValue(''); 
        gridbox.editCell(1,0); 
        //console.log(xmlhttp.response); 
        //console.log(xmlhttp.responseText); 
       } 
      } 
     }; 
     xmlhttp.send(); 


    } 
1

而不是使用return $FajlNev[0];使用 $data = $FajlNev[0]; echo json_encode($data);

+0

看看會發生什麼= / – Daniel

0

您的PHP腳本正在生成一個空白頁。 return關鍵字在函數外沒有任何意義,它只是終止腳本。如果你想處理結果,你需要明確地將echo的值傳到頁面上。

在您的網絡瀏覽器中導航到getfn.php?q=123。無論您看到什麼,您的AJAX請求都會看到。現在這將是一個空白頁面。如果你想要JSON,那麼做echo json_encode($the_data_i_want_back)

除此:你似乎在使用jQuery。如果是這樣,你可能最好使用內置的jQuery,跨瀏覽器的AJAX功能,而不是使用原始的JS XMLHttpRequest的東西。