2016-04-13 28 views
0

我有兩個簡單的PHP頁面:jQuery的AJAX POST請求錯誤值傳遞

notification.php

<html> 
<head><title></title> 
<meta charset="UTF-8"> 
<script src="https://cdn.firebase.com/js/client/2.4.2/firebase.js"></script> 
<script src="https://code.jquery.com/jquery-1.12.0.min.js"></script> 
<script src="https://code.jquery.com/jquery-migrate-1.2.1.min.js"></script> 
</head > 
<body> 
<script language="JavaScript" > 
function gotData(data) { 

       var toSave = "token=22"; //just a try not a real token 
       toSave +="&"; 
       var allPropertyNames = Object.keys(data); 
       var SIZEITEM = allPropertyNames.length; 
       for (var j=0; j<SIZEITEM; j++) { 
        var name = allPropertyNames[j]; 
        var value = data[name]; 
        toSave +=name+"="+value; 
        if(j < SIZEITEM-1) 
         toSave +="&"; 
       } 
       console.log(toSave); 
       $.ajax({ 
        url : "notification_okvalue.php", 
        type: "POST", 
        dataType : 'text', 
        data : {toSave:toSave}, 
        success : function(sended) { 
         console.log("sucessfull sending:") 
         console.log(sended); 
        }, 
        error : function() { 
         console.log('failed'); 
        } 

       }); 
      } 
     </script> 
     <script src="https://MYFIREBASE.firebaseio.com/chats/-KF4foKsJxIFbLEVxdNC/group.json?callback=gotData"></script> 
</body> 

</html> 

而且notification_okvalue.php

<html> 
<head> 
<title></title> 

</head> 
<body> 

<script language="JavaScript"> 
    var ref = new Firebase("https://MYFIREBASE.firebaseio.com/"); 
    ref.child("prova").set(
     { 
     all_ok:"<?php echo $_POST["token"];?>"; 
     }); 

</script> 
</body> 
</html> 

控制檯給我發送成功串 和console.log(toSave)給我正確的字符串

令牌= 22 & -KF4foL4E4E2V4oPU-CI = -KF4fi_gWTE4MQ5Bqskw & -KF4foL7g09NGKnQbouU = -KF4fJpvZC6LgbltEesZ

但是,當調用傳遞整個代碼POST確實console.log(sended)還給我整個notification_okvalue.php代碼

當然,我收到錯誤的notification_okvalue.php是$_POST["token"] is not setted

編輯 對於更具體一些,我實際上並不需要notification_okvalue.php的響應,但我需要的是,所有傳遞的$ _POST值必須存儲在Firebase中。所以我需要的是Firebase寫道。

+0

刪除數據類型:「文字」或變「文本」,以JSON或任何你正在返回。 – Webice

+0

我正在返回上面的'token = 22&-KF4foL4E4E2V4oPU-cI = -KF4fi_gWTE4MQ5Bqskw&-KF4foL7g09NGKnQbouU = -KF4fJpvZC6LgbltEesZ'的字符串,我嘗試刪除dataType,並且也切換到json。當我刪除它,結果是一樣的,與json的調用失敗 – Alfox

+0

我認爲你的toSave被格式化爲查詢字符串和[這是錯誤的](http://stackoverflow.com/questions/5876809/do-http-post-方法-發送數據作爲一種-查詢字符串)。創建一個JSON對象來代替:'{'token':22,// etc ...}' – KWeiss

回答

0

我認爲把你的POST數據構造成查詢字符串在這裏是錯誤的。比較this question

你可能有更多的成功,如果你只是用你的數據對象:

var postData = data; 
postData.token = 22; 

,然後在$。員額:

data: postData 

這樣的令牌應該正確地到達。不過,您可能仍會得到整個notification_okvalue.php作爲迴應。

0

AJAX請求不過是隱藏的經典客戶端請求。這意味着它無法獲得比使用瀏覽器加載頁面所能獲得的更多或更少的內容。正在檢索的數據是服務器在給定的URL返回的原始代碼,包括HTML和其他類型的代碼。

如果您想使用一個JSON結構(這將允許您簡化請求後的數據處理)來創建一個高效的系統,那麼服務器必須返回一個包含JSON代碼的空白頁面內容類型標題。舉例來說,如果你的服務器運行的PHP代碼:

header('Content-Type: application/json'); 
echo json_encode(array('foo' => 'bar')); // output : {"foo": "bar"}, which is correct JSON format 

的實際回報是,在你的JS代碼正確解釋被解析(這項工作在默認情況下,如果適當的請求參數都做的jQuery的字符串設置如此),但它可以是jQuery接受的任何其他格式。有關更多詳細信息,請參見$.ajaxdataType parameter's doc

其他 - 不太愉快 - 解決方案是處理您的請求後數據處理(success函數中的代碼),並通過複雜的方式獲取您真正需要的部分信息。我不會推薦它,因爲notification_okvalue.php不輸出實際的HTML。如上所述,在當前情況下實現一個強大的系統會非常快。沒有必要煩惱導航到一個空的HTML結構。

+0

感謝您的回覆,我更新了我的問題,添加了一個EDIT,以更具體地說明我需要什麼。 – Alfox

0

notification_okvalue.php衝不上任何的反應,這就是爲什麼響應顯示整個PHP代碼,如果你的本意是寫令牌上的反應,你應該簡化您的notification_okvalue。 PHP代碼包含不外乎只有線下:

<?php echo $_POST["token"];?>