2013-03-08 29 views
0

我有一個用php編寫的主頁,我使用Ajax在給定的div中加載「模塊」。當然,我剝去了一些代碼,但我認爲主要的東西在那裏:調用load(),檢查成功(或不)​​ajax請求,並檢查js變量「返回」從PHP(我'稍後會解釋這一點);這是JavaScript:在由Ajax加載的php模塊中使用javascript,即使請求已成功也返回錯誤值

var ajax_error = ""; //i use this to catch load errors 

//.....// 

$("#div_target").load("loadmodule.php", {'module':module_number}, function(response, status, xhr) 
{ 
    if (status == "error") //this is for ajax-related errors 
    { 
    alert('Failed loading module. Error: '+xhr.status + " " + xhr.statusText); 
    } 
    else 
    { 
    //this checks if the variable has been set by the php module to represent an error 
    if (ajax_error !== "") 
    { 
     $("#div_target").html(ajax_error); //show the error instead of the module 
     ajax_error = ""; //we reset the variable for future uses 
    } 
    else 
    { 
     //do something with the correctly loaded module.. 
    } 
    } 
}); 

即「loadmodule.php」是後續(再次,代碼減少):

//check for the post value, that should be a positive number as well as check for the file to exist 
if ( 
    isset($_POST['module']) 
    && is_numeric($_POST['module']) 
    && ($_POST['module'] > 0) 
    && file_exists("module_" . $_POST['module'] . ".php") 
) 
{ 
    //include module 
    include("module_{$_POST['module']}.php"); 
} 
else 
{ 
    //error retrieving module 
    ?> 
    <script type="text/javascript"> 
    ajax_error = "Cannot load module." ; 
    </script> 
    <?php 
} 

這種方式,在任何錯誤的情況下,同時檢查該$_POST['module'] ,我們可以通過設置變量ajax_error來「告訴」javascript發生了錯誤,該變量在ajax成功完成請求後將被「捕獲」。一切運作良好(這個變量ajax_error的背景是正確的,即使它看起來並不真實,在這裏的剝離代碼:P),但..

..我的問題是(是) :這種方法是否正確?這樣做有什麼問題嗎?有沒有什麼東西看起來不像解決方法?還是我在這種情況下做的最好?

PS:我發現很難提供一個標題,我的問題,希望這是好的:)

+0

這應該可能張貼在http://codereview.stackexchange.com/ – 2013-03-08 15:36:05

+0

@MatthewBlancarte也許我在codereview和stackoverflow之間的邊緣..如果其他人認爲同樣的事情,我會在那裏移動我的問題: ) – 2013-03-08 15:44:25

回答

0

是的,這可以工作,但似乎醜陋的我。我建議不使用$ obj.load,但是$.get。 服務器腳本(loadmodule.php)不會返回純HTML,但帶有兩個值的JSON:一個布爾標誌,用於確定模塊是否存在,其次是HTML內容。

然後,成功處理程序將決定是否將某物放到需要的位置,或者如果該標記指示該模塊不存在,則顯示錯誤消息。

+0

我應該把整個(和複雜的)HTML模塊放入由服務器腳本返回的JSON中嗎?我的意思是,這不是一些HTML行的問題,而是一個錯誤DOM結構 – 2013-03-08 15:46:50

+0

是的。不要忘記使用json_encode。這是通過AJAX返回數據的完全純粹的方式。 – amik 2013-03-08 15:57:33

相關問題