2010-03-13 24 views
1

也許這是一個語法錯誤,但我從來沒有假設。我有一個簡單的-dead- AJAX測試設置:PHP應該生成什麼回饋給jQuery AJAX請求?

http://www.mcphersonindustries.com/bucket/api.php是一種簡單的文件:

<?php echo "test"; ?> 

而且我有Apache作爲本地主機與這個jQuery位運行:

$(document).ready(function() { 

function doAjaxPost() { 
    $.ajax({ 
     type: "POST", 
     url: "http://www.mcphersonindustries.com/bucket/api.php", 
     data: "null", 
     success: function(resp){ 
      console.log("Response: '" + resp + "'"); 
     }, 
     error: function(e){ 
      console.log('Error: ' + e); 
     } 
    }); 
} 

doAjaxPost(); 

}); 

所以每次Firebug吐出Response: '',但沒有任何東西通過請求。我需要在PHP中聲明一個頭文件嗎?我在某個地方犯了一個頭腦發熱的錯誤嗎?

感謝您一如既往的見解。

回答

2

在您的示例中,您的Javascript期待返回XML或HTML。您可以明確指出這一點,但指定dataType參數。那是你想要回報的嗎?如果是的話,PHP應該這樣做:

<?php 
echo '<p>hello world</p>'; // "text/html" is implied 
?> 

另外,我不知道爲什麼你定義裏面的文件準備,而不是全局的功能。也許這是一個問題。

一般人想返回JSON代替,在這種情況下,它應該是這樣的:

<p>What is your name?</p> 
<input type="text" id="name"> 
<input type="button" id="send" value="Send"> 

$(function() { 
    $("#send").click(doAjaxPost); 
}); 

function doAjaxPost() { 
    $.ajax({ 
    type: "POST", 
    url: "http://www.mcphersonindustries.com/bucket/api.php", 
    data: { 
     name: $("#name").val() 
    }, 
    dataType: "json", 
    success: function(resp) { 
     alert(resp.result); 
    }, 
    error: function(e){ 
     console.log('Error: ' + e); 
    } 
    }); 
} 

和PHP:

<?php 
header('Content-Type: application/json'); 
$name = $_POST['name']; 
$out = array('result' => 'Hello, ' . $name); 
echo json_encode($out); 
?> 
1

如果它是一個單字符串,數字或布爾值,你可以在你的PHP腳本中使用echo。如果它是一個更復雜的類型(如事物數組或層次數據),那麼JSON是傳遞它的最輕量級的方式。

一般來說,你只需要一個PHP數組或對象,並以它作爲參數調用echo json_encode()

解析它只需將dataType: 'json'添加到您的散列。

+0

對不起,我想我回答了標題,而不是問題。 – 2010-03-13 01:06:24

1

您是從同一主機執行腳本嗎,還是其他位置?如果是這樣的話,你需要使用JSONP方法。該方法允許創建跨域功能調用。

在JSONP過程中,調用javascript爲函數創建一個唯一名稱,並通過get請求將其發送給調用腳本。 php腳本創建一個帶有該名稱變量的JavaScript文件,並將其返回給包含並執行該腳本的客戶端。

0

有人猜測,它可能是因爲jquery從服務器http響應頭中獲取數據類型爲text/html,但實際值不是html。

它看起來像一個伸展,但這是我可以想出的一切!