2012-08-09 243 views
2

我只是想做一個簡單的$ .post調用。

<body> 
<div id="main"> 
    <div id="diver"> 
    </div> 
    <form id="entry_field_container" action="" method="post" accept-charset="utf-8"> 
     <input type="text" name="entry_field" value="" id="entry_field"> 

     <input id="send" type="submit" value="send"> 
    </form> 
</div> 
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
<script> 
    $(document).ready(function(){ 
     $('#send').click(function(e){ 
      e.preventDefault(); 
      var txt = $('#entry_field').val(); 
      $.post(
       'http://localhost/proc.php', 
       { 
        name:'me', 
        text:txt 
       }, 
       function(data){ 
        console.log(data); 
        $('#diver').html(data) 
       }, 
       'json' 
      ) 

     }) 
    }); 
</script> 

內proc.php:

<?php 
    $name = $_POST['name']; 
    $text = $_POST['text']; 
    echo "{\"" . $name . "\", \"" . $text . "\"}"; 
?> 

出於某種原因,POST返回200,但控制檯永不再來與data,它只是一片空白。

最難理解的是爲什麼這個$ .ajax函數每次都有效。這不僅僅是同一事物的更詳細的例子嗎?

$.ajax({ 
    'type': 'POST', 
    'url':  'http://localhost/proc.php', 
    'async': true, 
    'cache': false, 
    'global': false, 
    'data': { 
     'name':'me', 
     'text':txt 
    }, 
    'error': function(xhr,status,err){ 
     alert("DEBUG: status"+status+" \nError:"+err); 
    }, 
    'success': function(data){ 
     console.log(data); 
    } 
}); 
+0

您的數據是否會進入服務器?查看AJAX視圖(例如Chrome或Safari內置的或Firefox + Firebug內置的視圖)。同時確保你沒有任何JS錯誤或警告。 – halfer 2012-08-09 20:58:12

+0

我這麼認爲,是的。在Inspector中,我可以查看'proc.php' - >'Preview',並且看到'{「me」,「文本」}',所以它看起來像proc.php正在讀取POST變量。 – nipponese 2012-08-09 21:07:52

回答

5

在你$.post你告訴jQuery的返回的文本是JSON,但在你的$.ajax你不是。

$.post失敗,因爲從PHP返回的文本不是有效的JSON。

{"me", "test"} 

這是無效的JSON。 {}是一個對象,因此它需要按鍵:

{"name": "me", "text": "test"} 

或者,也許你想要一個陣列([]):

["me", "test"] 

附:在PHP中創建JSON時,它的高度爲建議您使用json_encode而不是自己製作JSON。

+0

要添加到此,您可以通過http://jslint.com/運行您的輸出,它會告訴您到底輸出有什麼問題。 – scrappedcola 2012-08-09 20:58:45

+0

@scrappedcola:你是不是指http://jsonlint.com/? – 2012-08-09 21:00:50

+0

jslint.com也適用 – scrappedcola 2012-08-09 21:01:42

5

您在$ .post調用中指定了一個「json」格式,但不是在$ .ajax調用中,可能是因爲您沒有返回有效的JSON響應,這就是爲什麼您的$ .post是不執行它的成功方法?

相關問題