2009-10-23 47 views
0

我正在嘗試編寫一個簡單的JSON文章,並且無論我做什麼,回調警報都不會顯示出來。我用螢火蟲看帖子是否得到任何迴應,並且「SHOE」回來。那麼爲什麼警報不在回調中工作?Jquery JSON Ajax回調不工作 - CakePHP

視圖代碼:

$('#GaragePartAddfrompartlistForm').click(function() { 
     var item = "CHEESE"; 
    $.post("garage_parts/getlastid", { 'item' : item }, 
    function(data){ 
    alert(data.result); 
    }, "json"); 
    }); 

控制器代碼:

function getlastid() { 
    $newid = "SHOE"; 
     $array = array('result' => $newid); 
     echo json_encode($array); 
    } 
+0

你能分享你的通話迴應嗎? – Sinan 2009-10-24 00:14:50

回答

1

你應該嘗試設置HTTP標頭與所述響應:

header("Content-type: application/json") 

header("Content-type: text/plain") 

jQuery可能不會處理您的響應,因爲它沒有得到預期的類型。然後

你的響應代碼是:

function getlastid() { 
    header("Content-type: text/plain"); 
    $newid = "SHOE"; 
    $array = array('result' => $newid); 
    echo json_encode($array); 
} 

希望這有助於!

0

不要忘記爲Ajax響應設置空的佈局:

function getlastid() { 
    $this->layout = 'ajax'; 
    ... 
0

我不是太熟悉的蛋糕,但我用笨(類似於)...

一件事我已經注意到像這樣的框架,是當你發出一個使用echo json_encode($array)的json響應時,你必須立即在下一行輸入exit();。其他方面,框架發送標題指示html MIME類型。

可以是蛋糕太大的情況下,在任何情況下,它是值得一試...

3

確保您在beforeFilter調試設置爲0,使用RequestHandler組件來檢查它是否是一個Ajax請求。

使用RequestHandler

var $components = array(..., 'RequestHandler', ...); 

組調試爲0;如果它是一個Ajax請求

function beforeFilter() 
{ 
    if ($this->RequestHandler->isAjax()) { 
     Configure::write('debug', 0); 
    } 
} 

,並在你的函數

function getlastid() 
{ 
    $this->autoRender = false; 
    $this->autoLayout = false; 

    $newid = "SHOE"; 
    $response = array('result' => $newid); 

    $this->header('Content-Type: application/json'); 
    echo json_encode($response); 
    return; 
} 

如果回聲JSON和不設置調試爲0,cake會在最後加上執行時間,並且不會成爲有效的json響應,從而阻止jQuery正常工作 閱讀。

作爲一個額外的,通常我設置了一些更多的東西在$迴應,所以我可以更好地處理它。

function getLastId() 
{ 
    ... 
    $response = array('success' => false); 

    ... code ... 
    if ($my_code_is_good) { 
     $response['success'] = true; 
     $response['data'] = $my_code_result; 
    } 

    ... 
} 

希望這有助於

+0

嗨, 所以我注意到,如果我將類型從「json」更改爲「JSON」,它會打印警報。但是,如果我嘗試在警報中打印data.result,則警報會打印「未定義」。如果我打印數據,警報以「{」結果「:」SHOE「}」響應。這很奇怪......爲什麼JSON無法正常工作? – 2009-10-24 03:43:59

+0

您是否使用過Firebug來查看服務器的響應情況?問題是jQuery沒有將響應檢測爲json,因此,如果你只是提醒「數據」,它會顯示一個字符串,如果你嘗試訪問一個屬性,比如「data.result」,因爲它是一個字符串,你得到undefined – Leite 2009-10-24 04:05:06

+0

我如何讓jquery檢測響應爲json? – 2009-10-24 04:14:17

0

我發現與我的symfony/PHP應用程序,沒有HTML字符普通文本響應(使用空或「JSON」的dataType)將觸發成功回調。但是,如果服務器不輸出除標題外的任何內容,則不會調用成功回調(我會考慮一個錯誤)。此外,如果服務器響應包含HTML字符(<>等),除非上下文類型顯式設置爲text/html,否則不會調用回調。這也消除了煩人的< pre>標籤被jQuery錯誤地添加,以及阻止jQuery將響應轉換爲HTML實體(& lt; & gt;等等)。