2012-05-21 50 views
0

我是新來的PHP/jQuery的編程,我所有的這一天過去試圖搞清楚如何從一個jQuery AJAX調用訪問JSON場:無法訪問在AJAX調用JSON領域

我使用codeingniter,並在我的控制器相關的代碼是:

if($this->input->is_ajax_request()) 
{ 
    $view_data['test'] = 'ajax'; 
    echo json_encode($view_data); 
} 
else 
{ 
    $view_data['test'] = 'not ajax';        
    $data = array(
      'javascripts' => array(
      'js/jquery.dataTables.js', 
      'js/zona/dataTable_zone.js', 
      'js/zona/gestisci_zone.js', 
      'js/jquery-ui-1.8.20.custom.min.js' , 
      'js/jquery.ui.error-panel.js', 
      'js/jquery.validate.min.js' , 
      'js/localization/messages_it.js' 
     ), 
     'style_sheets' => array(
      'css/south-street/jquery-ui-1.8.20.custom.css' => 'screen',     
      'css/jquery.dataTables.css' => 'screen' 
     ), 
     'content' => $this->load->view('zona/gestisci_zone', $view_data, TRUE) 
    ); 

    $this->load->view($this->template, $data); 
} 

` 在視圖相關的代碼是

<div id="id_test"> <p><?php echo $test ?> </p></div> 

和JavaScript文件相關的AJAX代碼是

`$阿賈克斯({類型: 「POST」, 網址:this_url, 數據類型: 'JSON', 數據:post_data,
成功:功能(數據){

           console.log(data); 
              console.log($("id_test").empty()); 
             $("#id_test").empty().append(data.test); 
             }, 
             error: function(data){ 

             alert("error"); 

) ;`

這樣的AJAX輸出爲Array{"test":"ajax"}

我預期的行爲是使用$("#id_test").empty().append(data.test);的AJAX OUTP ut將只是ajax這個詞,但它只是返回一個空白的div。 我試圖在許多模式下訪問,但我沒有想到如何實現這一點。 也許我失去了一些東西,因爲我缺乏經驗或者我使用了錯誤的方法。 有什麼建議嗎? :)

經過一些調試後,我得出的結論是明文/錯誤的JSON問題。 它只返回數組的文本rapresentation而不是json數組。現在,我怎麼能從控制器發送正確的json數組? (我已經強制mimetype到應用程序/ json沒有效果)

+0

console.log(data)給你什麼,以及console.log($(「id_test」)。empty())? –

+0

成功的方法嘗試調試數據,如console.log(數據),讓我知道它是否顯示任何結果 –

+0

我現在在家裏。只要我可以,我會試試這兩個!謝謝! – Pulz

回答

0

這是dataType而不是datatype。我認爲這就是問題所在,好像它不會將返回的數據解析爲json和字符串。

+0

我同意 - 語法和適當的大小寫非常重要。 – Dharmavir

+0

我知道dataType,我也試過,但dataType我沒有Array {「test」:「ajax」}輸出。也許還有另一個隱藏的問題..? – Pulz

+0

與數據類型它將返回Array {「test」:「ajax」},使用dataType它將不會返回任何內容,但添加一個錯誤函數將顯示錯誤函數中的警報(msg)。這對我來說似乎有點奇怪:) – Pulz

0

我想你可能需要在json和jsonp之間切換,如果你還沒有成功。 jQuery有2個選項「json」和「jsonp」

+1

'jsonp'用於跨域請求。 –

+0

謝謝,明白了。 – Dharmavir

0

嘗試在ajax調用中添加一個錯誤處理程序,以便您可以判斷它是否成功執行。我認爲你必須使用data.d

+0

'data.d'?你爲什麼那麼想 ? –

+0

對不起,來自asp.net背景。請忽略data.d – ZERO

+0

你是什麼意思的錯誤處理程序?一個錯誤:function()?對不起,我是新來的網絡編程:) – Pulz

0

只是一個猜測,但......語法錯誤也許?

if($this->input->is_ajax_request()) 
{ 
    view_data['test'] = 'ajax'; 
    // dont you mean $view_data? 

    echo json_encode($view_data); 
} 
+0

幾乎可以肯定這是一個剪切/粘貼錯字..但我明天早上會仔細檢查:) – Pulz

+0

你還需要使用for循環迭代數據對象 – gorelative

+0

這是一個剪切/粘貼錯字!你打算迭代JavaScript數據數組?在哪種模式下? – Pulz

0

如果我理解正確的話,爲了讓您的<div id="id_test"> <p><?php echo $test ?> </p></div>通過從$.ajax()的「Ajax」的字來代替,試試這個:

$.ajax({ 
    type:"POST", 
    url:this_url, 
    dataType: 'json', 
    data: post_data, 
    success: function(data){ 
    $("#id_test").empty().append(data.test); 
    } 
}); 

既然你提到了data回報Array{"test":"ajax"},你可以以這種方式訪問​​返回的JavaScript對象data.test

+0

這是個問題..爲什麼它不是這樣工作的? :) – Pulz

+0

試試這個,'$('#id_test')。empty()。html(data.test);' – deex

+0

「我的預期行爲是使用$(」#id_test「)。empty()。append(data .test); AJAX輸出將只是單詞ajax「 – Pulz