2012-03-30 47 views
-1

我正在使用jquery插件datatables,並試圖利用fnRender函數來操作一些數據。爲什麼這個Javascript函數會提醒我的值,但不會返回相同的值?

我有一個PHP腳本,從我的$ .post返回一個JSON字符串。以下是我從每篇文章中獲得的示例回覆:{"description":"myvalue"}。我從谷歌Chrome開發者工具中獲得了這個。

這是帖子的功能:

$.post("functions/getDescription.php", {gpn:oObj.aData[1]}, 
    function(data) { 
    returnedVal = jQuery.parseJSON(data); 
    var test = returnedVal.description; 
    //alert(test); 
    return test; 
    }); 

這裏是我的PHP腳本:

$passedVal = mysql_real_escape_string(($_POST['gpn'])); 
$descriptionPrint = array('description' => ""); 

include 'db_include.php'; 

$getDescription = "SELECT part_number_description, description FROM unit_description 
      WHERE part_number_description = '$passedVal' "; 
$result = mysql_query($getDescription,$db) or die(mysql_error($db)); 

    while ($row = mysql_fetch_array($result)) { 

    extract($row); 

    $descriptionPrint = $description; 
    echo json_encode(array('description' => $descriptionPrint)); 
    } 

只有一個從每個查詢返回的值。

每一行警告正確的值,但返回未定義。

如果我只用一個字符串或任何通用值的返回值替換JavaScript函數,它工作正常。

我覺得在這一切中都有一些愚蠢的東西。任何幫助非常感謝,請讓我知道如果你需要更多的信息(我知道排除一些插件運行的東西,如datatables可能會令人沮喪)。謝謝。

+4

歡迎** **異步的奇妙世界!你不能那樣做。 – SLaks 2012-03-30 20:15:51

+0

這就像人們甚至沒有閱讀[api](http://api.jquery.com/jquery.post) – zzzzBov 2012-03-30 20:20:09

+0

我有一種感覺會因爲這個問題而被殺。我仍然很新的jQuery/JavaScript,只是想獲得一些反饋。我通過反覆試驗學得更好。對不起,得罪了。 – chapman84 2012-03-30 20:30:14

回答

3

因爲$.post不會返回您作爲其第三個參數傳遞給它的匿名回調函數的返回值。

由於Ajax是異步的,$.post甚至在之前返回執行回調函數。

如果你想在數據從服務器回來的時候做一些事情,那麼回調函數必須爲它(或調用另一個函數來做)。

這是同樣的原因,以下是行不通的:

var were_you_expecting_sunshine = $('button').click(function() { 
    return "sunshine"; 
}); 
+0

謝謝。還有其他幾種方法可以完成我的目標。我只是修修補補,它把我扔掉,我可以提醒的價值觀,但不使用它們。 Ajax - 異步,是有道理的。 – chapman84 2012-03-30 20:20:49