2013-06-04 134 views
1

我得到我抓內部變量(當Web服務調用失敗)語句,並試圖使用就可以了json_encode在Ajax返回中獲取PHP變量?

try { 
    WebServices::create($this->nameWS); 
} 
catch (Exception $e) {     
    $tr = $e->getTrace(); 
    $x = $tr[3]; 
    json_encode($x);      
} 

$x包含字符串。

這catch語句把我送到我的$阿賈克斯的錯誤部分:

$.ajax({ 
    type: 'POST', 
    url: 'index.php', 
    data: 'module=random&action=' + action + params, 
    dataType: 'json', 
    success: function(dataJson){ 
     callbackServer(action, otherVars, dataJson); 
     callServer.isRun = false; 
    }, 
    error : function(dataError) { 
     console.log("I want to get the $x variable here"); 
    } 
}); 

console.logging的dataError參數返回垃圾的一個巨大的長長的名單,其中沒有一個是有關這個變量。

我已經看到有可能發送一個json_encoded變量給JS,但從來沒有在ajax返回的錯誤塊內 - 是否有一種簡單的方法來獲取這個變量?多謝你們。

+0

只需要注意 - 您鏈接到的問題與此情況無關,因爲您使用AJAX請求PHP腳本的結果,所以肯定可以從該腳本返回json_encoded變量的表示形式PHP返回到JavaScript。 – Pudge601

+0

@ Pudge601好的,將刪除鏈接。所以你說可以做我想做的事情? – user2381114

+0

是的,如果您在web服務中發現異常,您可以返回一個包含描述錯誤的json編碼變量的響應,其方式與通常發送響應的方式完全相同。請記住,您需要讓jquery ajax處理腳本通過設置響應狀態代碼來知道發生了錯誤,或者如果您使用的是基於json的RPC,則可以在json對象中包含「status:false」 – Pudge601

回答

1

您需要echo json_encode($x)併發送正確的響應頭。

+0

這是一個很好的開始。現在我的控制檯日誌包含它,但我怎樣才能從那個巨大的字符串中提取出來? - 這正是返回的 - http://jsbin.com/esazes/2/edit(注意「EvaService」)字符串 – user2381114

+0

我不知道什麼樣的數據是甚至可以從那裏得到那個字符串在一個理智的辦法。我會嘗試清理這些警告,並告訴我們在通過控制檯之前PHP返回的內容。 –

0

你逮住例外,不出事回吧:)所以這將是在成功獲得()函數

,使其在錯誤必須發送錯誤頭來回例如可用500 - 然後js庫將檢測到有錯誤並將輸出置於錯誤()函數中

+0

如果Web服務關閉,我收到console.log,所以我在錯誤:部分。我只想在那裏獲取變量 – user2381114

+0

以及dataError.responseText中的變量? – Ochi

+0

一個非常長的HTML字符串:s http://jsbin.com/esazes/1/ – user2381114