2016-02-12 58 views
-1

我有一個PHP數組值。我循環遍歷它,通過遍歷一個for循環來對服務器進行ajax調用(我完全理解,在for循環中創建ajax cals並不是一個好主意。任何建議/指向這樣做的方法都是非常棒的。但是我想請求這個問題的答案)。來自服務器的數據將根據返回的內容&取得不同的時間。Ajax/Jquery - 從服務器返回數據時調用javascript函數/使用ajax執行並行SQL查詢

我的問題是showCustomerUsageChart函數調用在任何階段都不會被調用。我試着通過在這個函數的條目&上設置一個斷點來查看它是否完全沒有調用。但是,我可以看到服務器在各個數據可用時在不同時間返回JSON數據。毫無疑問,我明白我已經實施了這個錯誤。

AJAX世界對我來說並不是太熟悉。我在這個論壇上查了好幾個問題,但是有點拼命拼湊。

請問我可以請求幫助以達到我要求的服務。我非常感謝任何幫助。

<script> 
    var ajaxurl = 'myDbHandler.php'; 
    <?php for ($k = 0; $k < count($propertyCustomer); $k++) { ?> 
     data = { 
      'param1': paramFromUser1, 
      'param2': paramFromUser2, 
      'param3': paramFromUser3, 
      'lookUpParamId': "<?php echo $k ?>" 
     }; 

     $.post(ajaxurl, data,function (response) { 
      var resp = $.parseJSON(response); 
      showCustomerUsageChart(
       "<?php echo $propertyCustomer[$k][0] ?>", 
       "<?php echo $propertyCustomer[$k][1] ?>", 
       "<?php echo $propertyCustomer[$k][2] ?>", 
       "<?php echo $propertyCustomer[$k][3] ?>", 
       resp,  
      ); 
     }); 
    <?php } ?> 
</script> 
+1

你能提供HTML/JS生成的代碼嗎? –

+0

您似乎沒有在任何地方定義「showCustomerUsageChart」 – Quentin

+0

這實在是很奇怪的行爲。你已經有了一個來自服務器的數據集,但是再次調用服務器N次以獲得更多數據。爲什麼不在加載頁面之前檢索所有*數據,或者在* single * AJAX請求中獲取所有數據? –

回答

1

所以這裏有一個方法去改變它,我避免使用JavaScript的JavaScript,所以代碼和標記更清潔。

爲了模擬遲滯您的疑問我做了這個未來:

myDbHandler.php

$number = rand(2, 11); 
sleep($number); 

echo 'success after ' . $number . ' seconds'; 

原來的PHP文件現在看起來是這樣(test.php的):

<?php 
// Array filled with testdata: 
$propertyCustomer = array(
    array('value1', 'value2', 'value3', 'value4'), 
    array('value1', 'value2', 'value3', 'value4'), 
    array('value1', 'value2', 'value3', 'value4') 
); 

// Make a string that html can handle and also encode the array above to a jsonString: 
$json = htmlentities(json_encode($propertyCustomer)); 

?> 

<!-- Echo the string as data-attribute --> 
<div id="holdingElement" data-array="<?php echo $json ?>"></div> 
<script src="https://code.jquery.com/jquery-2.2.0.min.js"></script> 
<script src="test.js"></script> 

我從標記中分離出js,因爲我無法忍受難看的代碼(test.js):

$(document).ready(function() { 
    // Get the array from the element: 
    var phpArray = $('#holdingElement').data('array'); 

    // Console.log for testing: 
    console.log(phpArray); 

    // Loop through the array with the jQuery each function: 
    $.each(phpArray, function(k, phpArrayValue){ 
     // The makeCall function returns a ajaxObject so the object gets put in var promise 
     var promise = makeCall(k); 

     // Now fill the success function in this ajaxObject (could also use .error() or .done()) 
     promise.success(function(response){ 
      // When success, call the function and use the values out of the array above 
      showCustomerUsageChart(
       phpArrayValue[0], 
       phpArrayValue[1], 
       phpArrayValue[2], 
       phpArrayValue[3], 
       response 
      ); 
     }); 
    }); 
}); 



function makeCall(paramId) { 
    // Just testdata: 
    var paramFromUser1 = 'val1'; 
    var paramFromUser2 = 'val2'; 
    var paramFromUser3 = 'val3'; 

    // Use ajax instead of $.post to use the success function, and return this ajaxObject 
    return $.ajax({ 
     url: 'myDbHandler.php', 
     type: 'post', 
     data: { 
      'param1': paramFromUser1, 
      'param2': paramFromUser2, 
      'param3': paramFromUser3, 
      'lookUpParamId': paramId 
     } 
    }); 
} 

// Function to log the results from the ajax call: 
function showCustomerUsageChart(val1, val2, val3, val4, response) { 
    console.log(val1, val2, val3, val4, response); 
} 

我希望這是任何SENCE,並且它爲你的作品!

+0

非常感謝Rick。這是我尋找的100%。我一直在尋找實施這個解決方案几個月了。通過不同的方式保持接近解決方案,但不是我想達到的100%。你的解決方案已經成功了。再次感謝你。 – usert4jju7

0

你的代碼是錯誤的有:

showCustomerUsageChart(
        <?php echo $propertyCustomer[$k][0] ?> 

你有一個 「」 後的PHP結束標記放。

+0

那麼,你能提供HTML/JS生成的代碼嗎? –

+0

當然,讓我知道。謝謝 – usert4jju7

相關問題