2013-02-03 32 views
0

它真的讓我感到困擾,因爲我無法用回聲響應客戶端。我可以通過HTML文件返回JSON數據嗎?

我需要響應與JSON以下數據,

header("Content-type: application/json"); 
$response = array(); 
$response['username'] = $user; 
$response['password'] = $pass; 
json_encode($response); 

不過,我需要通過一個HTML文件來做到這一點,如:

Template::set('response', json_encode($response)); 

的原因是,我的框架始終要求一個頁面輸出如:

Template::set('response', array()); 

否則它會嘗試執行它本身。 (這是一個錯誤頁面或一個空html響應)

所以我無法用JSON頭和迴應作出迴應。我基本上試圖找到一個解決方法。如果我無法完成這個任務,那麼我會稍微調整我的框架來響應頭文件,但如果可能的話,我更喜歡使用一些小的解決方法。

Ps。順便說一句,這是我的jQuery如何運行。我相信這裏沒有問題,但我可能弄錯了,所以也請看看這個。

$("#doLogin").click(function(e) { 
    e.preventDefault(); // prevent normal form submit 
    $("#login-result").html('<img src="<%THEME%>images/loading.gif">'); 
    var formData = $("#loginForm").serialize(); 
    $.post("?page=login", formData, function(response) 
    { 
     alert(response.username); 
     $("#login-result").html(response.username); 
    },'json'); 
}); 
+4

這沒有任何意義。你能試着詳細說明你希望完成什麼,爲什麼? –

+0

我會更新我的問題主題,在這裏回覆一秒會很長。 –

+0

@LyverKinkki:*「......這裏回覆太長......」*即使不是這樣,改善問題的正確方法是編輯問題。 –

回答

1

您必須修改您的框架的代碼或適應它。

我建議你分開業務邏輯和輸出。處理請求時,您不應該執行任何回顯,而是準備輸出,並將輸出變量傳遞到您的模板。您的模板應該獨立於您的業務邏輯運行,而僅取決於您傳遞的變量。這將使您的代碼更易讀並易於修改。

至於你當前問題的解決方案:我會通過添加一個選項來傳遞數組來擴展模板框架,並且框架會將其呈現爲一個json對象。這將保持業務邏輯和視圖分離,仍然給你一個簡單的解決方案,以滿足您的需求。

+0

是的,調整了我的框架,現在它工作。謝謝。 :) –

0

你可以只規避什麼框架試圖做這樣做:

header('Content-type: application/json'); 
echo json_encode($json); 
exit; 

不過,我會很驚訝,如果框架沒有abilty發出JSON內置

+0

它甚至不是一個框架,只是一個隨機廢話tbh。 –

相關問題