2013-12-15 62 views
0

這是我正在使用的解決方案 - 問題解釋如下。使用jquery ajax調用php函數 - 從以前的答案奇怪的問題

我不明白爲什麼.getJSON()失敗。我通過使用.post()而不是JSON返回字符串作爲補償。

$.post('test.php', { action: 'test' }, function(data, status){ 

    console.log(jQuery.parseJSON(data)); //form the JSON from a string after the POST 

}); 

它現在可以正常工作,但會給瀏覽器和最終用戶帶來更多壓力。對於大規模部署來說,保存一點服務器CPU可能實際上會更好一些?無論如何。奇怪的小錯誤。



我用這個以前的答案開始使用我在做什麼:using jquery $.ajax to call a PHP function

和雙重檢查我的基本用法反對:http://api.jquery.com/jQuery.getJSON/http://api.jquery.com/jQuery.post/

我有圓滿成功$ .post,但使用$ .getJSON時甚至沒有返回狀態。

澄清:我正在編輯這些功能提出問題。我正在測試可用的json數據,我已經處理了我只是添加了通過ajax請求調用php函數的功能。不要被我的奇怪的PHP回聲json_encode拋出。我的工作數據已經過驗證。

不管怎麼說,這裏是.js文件:

$.post('test.php', { action:'test' }, function(data, status){ 
    console.log(data); //{"test_result":"success"} 
    console.log(status); //success 
}); 

$.getJSON('test.php', { action:'test' }, function(data, status){ 
    console.log(data); //nothing 
    console.log(status); //nothing 
}).fail(function(jqxhr, textStatus, error) { 
    console.log(textStatus); //parsererror 
    console.log(error); //SyntaxError: Unexpected end of input 
}); 

和我.PHP:

<?php 
    try { 
     if(isset($_POST['action']) && !empty($_POST['action'])) { 
      $action = $_POST['action']; 
      switch($action) { 
       case 'test': 
        echo json_encode(array('test_result' => 'success')); 
        break; 
      } 
     } 
    } catch(Exception $e) { 
      echo "ERROR: " . $e->getMessage(); 
    } 
?> 

這成功地執行爲$。員額,但是當我切換到.getJSON $不再功能。有一個簡單的原因,爲什麼?

+0

我發現很多帖子說它失敗,因爲數據是無效的JSON,但我檢查我的數據在瀏覽器中,然後複製/粘貼到jsonlint.com驗證,它說沒關係。我真的迷失了。 – Qwiso

回答

0

test.php的文件中產生不好的JSON格式,以及失敗的getJSON,我建議你:

echo json_encode(array('test_result' => 'success')); 

有了這個代碼,你會得到:{"test_result":"success"}

與原有的代碼echo json_encode("[{'test_result':'success'}]");你將獲得"[{'test_result':'success'}]"

嘗試添加失敗回調如:

$.getJSON('test.php', { action:'test' }, function(data, status){ 
    console.log(data); //doesn't fire 
    console.log(status); //doesn't fire 
}).fail(function(jqxhr, textStatus, error) { 
    var err = textStatus + ", " + error; 
    console.log("Request Failed: " + err); 
}); 
+0

我只是在編輯,以使其更加傻瓜。 '$ test = array(「test」=>「success」); echo json_encode($ test);' 仍然失敗。你的建議也一樣。問題在於'$ .getJSON'永遠不會執行,我懷疑'{action:'test'}'與它有關。 – Qwiso

+0

我更新我的答案,我建議使用**失敗**函數來調試和捕獲錯誤。 –

+0

這非常有用。是的:'parsererror,SyntaxError:意外的輸入結束' – Qwiso