2011-05-25 190 views
0

我想將我的網頁轉換爲ajax,但我不能讓它返回任何東西。無法讓jQuery ajax工作

HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    <title>test page</title> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js" type="text/javascript"></script> 
<script type="text/javascript"> 
<!-- 
$(document).ready(function(){ 
    // events 
$("#test").click(function(){ 
    var myData; 
    myData = makeDataVar(); 
    sendData(myData); 
});  
    // functions 
function makeDataVar(){ 
    return "name=joe&location=bostin"; 
} 
function sendData(myData){ 
    alert("start mydata function"); 
    $.ajax({ 
     type: "POST", 
     url: "http://www.mypage.com/submitMe.php", 
     dataType : "json", 
     data: myData, 
     success: function (msg) { 
      alert("Data saved: " + nameMsg); 
      alert("Data saved: " + locationMsg); 
      alert("data saved: " + error); 
     }, 
     error : function(XMLHttpRequest, textStatus, errorThrown) { 
      alert("error " + errorThrown); 
     } 
    }); 
    alert("end mydata function");   
} 
}); // end document.ready 
//--> 
</script>  
</head> 

<body> 

<button type="button" id="test" >Add New</button> 

</body> 
</html> 

PHP

<?php 
$myVar = $_POST['name']; 
$return['nameMsg'] = "thanks $myVar"; 
$myVar = $_POST['location']; 
$return['locationMsg'] = "from $myVar"; 
$return['error'] = false; 
echo json_encode($return); 
?> 

我讓所有我的javascript警報除了那些阿賈克斯聲明(無論成功或錯誤)內。這幾乎就像我的腳本跳過那一個聲明。我不確定我在這裏錯過了什麼,但我花了幾個小時試圖弄清楚。任何幫助你可以提供將不勝感激。

+0

'type'應該是小寫字母,儘管我不確定這是您的唯一問題。 – 2011-05-25 00:36:38

+0

成功回調僅在服務器返回成功的2xx代碼時調用。你確定你的服務器沒有拋出任何錯誤嗎? – scurker 2011-05-25 00:39:36

+0

@scurker - 他會得到錯誤狀態。我知道的唯一情況是他是否試圖在沒有jsonp的情況下跨域執行某些操作。 XHR在那時就消失了。 – 2011-05-25 00:43:41

回答

1

我的投票是你的變量裏面的成功回調是未定義的,所以該方法不編譯或執行。

alert("Data saved: " + nameMsg); 
alert("Data saved: " + locationMsg); 
alert("data saved: " + error); 

nameMsglocationMsgerror不會出現在任何地方定義。這似乎僞裝成一種不被執行的方法,但Firebug或Chrome的開發人員工具應該會顯示錯誤。

如果您不嘗試使用它們,您的成功回調會執行嗎?只要做一個

alert("foo"); 

看看是否有效。

+0

你是正確的,修復它。我需要使用msg.nameMsg,因爲msg是我的傳入參數。感謝有時候,我在處理了太長時間後忽略了一些事情。 – user052211 2011-05-25 01:01:10

+0

我很高興我的101級JavaScript可以提供幫助。我看到我的回調無法執行很多次,因爲這個! – 2011-05-25 01:02:56

0

應該

$.ajax({ 
    type: "POST", 
    .... 
}); 

使用類似Firebug的檢查您的JS錯誤。

你還需要確保你是從同一個域調用它。

+0

我也投票支持javascript錯誤檢查。您是否在頁面中定義了'nameMsg','locationMsg'和'error'? – 2011-05-25 00:44:00

+0

用戶上面說過他/她已經改變了類型,但無濟於事:「我修復了錯字並刷新了我的頁面仍然沒有結束。」 – mc10 2011-05-25 00:59:14

+0

我明白了。在他們評論之前我有過這個答案。 – silent1mezzo 2011-05-25 03:47:24

1

你是從www.mypage.com打這個嗎?如果你不是,XHR會被吃掉,沒有回報(錯誤或成功)。

此外,你有一個錯字...'類型'應該是較低的,但不應該導致你的問題。

+0

不,我只是將這個帖子的代碼更改爲mypage.com。我修復了錯字,並刷新了我的頁面仍然沒有去。 – user052211 2011-05-25 00:42:36

+0

我的問題是...你是從同一個域(和子域)打你從AJAX調用的頁面嗎? – 2011-05-25 00:45:02

+0

是這兩個文件都在同一個目錄中 – user052211 2011-05-25 00:49:40

0

也有你的PHP腳本可能會拋出一個「通知」到輸出,由於可變$return不被初始化,因此沒有返回有效的JSON

嘗試

$return = array(); 

使用前的可能性它

0

這就是你想要的?只需複製並粘貼到您的html文件並更改鏈接..

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    <title>test page</title> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js" type="text/javascript"></script> 
<script type="text/javascript"> 
<!-- 
$(document).ready(function(){ 
    // events 
$("#test").click(function(){ 
    var myData; 
    myData = makeDataVar(); 
    sendData(myData); 
});  
    // functions 
function makeDataVar(){ 
    return "name=joe&location=bostin"; 
} 
function sendData(myData){ 
    alert("start mydata function"); 
    $.ajax({ 
     type: "POST", 
     url: "http://www.mypage.com/submitMe.php", 
     dataType : "json", 
     data: myData, 
     success: function (msg) { 
    //function returns json object not variables 
      alert("Data saved: " + msg.nameMsg); 
      alert("Data saved: " + msg.locationMsg); 
      alert("data saved: " + msg.error); 
     }, 
     error : function(XMLHttpRequest, textStatus, errorThrown) { 
      alert("error " + errorThrown); 
     } 
    }); 
    alert("end mydata function");   
} 
}); // end document.ready 
//--> 
</script>  
</head> 

<body> 

<button type="button" id="test" >Add New</button> 

</body> 
</html>