2013-08-21 62 views
0

我有一個腳本,其中有多個AJAX functions,它們調用相同的php_ajax.php文件。 在php我通過檢查設置了$_GET$_POST vars來檢查要執行的代碼。

我不得不問題:

1)I具有function其傳遞給ajax PHP文件可變$_GET['lang']。另一個函數傳遞三個變量,包括$_GET['lang']。在這種情況下,執行php ajax文件中的兩部分代碼。這是因爲我檢查什麼樣的代碼來執行這樣說:

//FIRST PART OF CODE 
if(isset($_GET['lang']) && $_GET['lang'] != ''){ 
    //do stuff here 
} 

//SECOND PART OF CODE 
if(isset($_POST['lang']) && isset($_POST['sub']) && isset($_POST['body'])){ 
    //do stuff here 
} 

我想只執行如果只有$_GET['lang']被設置好的第一部分。問題是,如果其他$var包括$_GET['lng']被設置,這部分代碼也會被執行。我知道我可以使用類似!isset($_GET['sub']的東西,但這不是一個通用解決方案:僅適用於$sub。有沒有一種通用的方法來檢查是否只有isset($_GET['lang'])而沒有別的?

2)爲什麼會執行代碼的第一部分,當我打電話POST請求AJAX? 這裏的腳本:

$.ajax({ 
    url: 'ajax.php', 
    cache: false, 
    data: {lang: lang, sub: sub, body: area_body}, 
    type: 'POST', 
    success: function(result){ 
       alert(result); 
      }, 
    error: function(result){ 
       alert('Error.'); 
      }, 
}); 

這兩個執行代碼,即使$_GET['lang'] shouldn't be isset ... the類型:「POST'`。

謝謝!

回答

2

在發佈數據時添加一個參數來區分操作。

data: {lang: lang, sub: sub, body: area_body, type: 'add'}, 

而在服務器端

if($_POST['type'] == 'add') { 
    //your code 
} 

if($_POST['type'] == 'edit') { 
    //your code 
} 
+1

謝謝你,這是一個好方法。它也可以幫助理解我在這部分代碼中所做的事情。 – Perocat

0

1)檢查$_GET['lang']設置,然後檢查它是否做定義的唯一$_GETcount($_GET) == 1。例如:if(isset($_GET['lang']) && count($_GET) == 1){ ... }

2)

echo "<pre>" . print_r(get_defined_vars(),true) . "</pre>";

調試代碼,以檢查是否有不必要的聲明變量。

+0

謝謝!對於1)問題是,'jQuery'的'cache:false'發送一個var代碼以防止瀏覽器緩存! 'count($ _ GET)!= 1' – Perocat

+0

兩個數組爲空:'[_GET] =>數組 ( ) [HTTP_GET_VARS] =>數組 ( )' – Perocat

1

關於你的第一個問題,你可以做像這樣:

if (count($_GET) === 1 AND !empty($_GET['lang'])) 

關於第二個問題,嘗試在您的PHP頁面上做一個print_r($_GET);

+0

謝謝!對於1)問題是,'jQuery'的'cache:false'發送一個var代碼以防止瀏覽器緩存! 'count($ _ GET)!= 1' – Perocat

相關問題