2016-04-13 7 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-Сi = -KF4fi_gWTE4MQ5Bqskw & -KF4foL7g09NGKnQbouU = -KF4fJpvZC6LgbltEesZ

Но когда вызов проходит весь код, как POST действительно console.log(sended) вернуть мне весь код notification_okvalue.php

И, конечно, я получаю ошибку в notification_okvalue.php, что $_POST["token"] is not setted

EDIT для более конкретно, мне действительно не нужен ответ notification_okvalue.php, но мне нужно, чтобы все переданное значение $ _POST хранилось в Firebase. Так что мне нужна запись Firebase.

+0

Remove DATATYPE: «текст» или изменения «текст» в формате 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; 

И тогда в вашем $ .post:

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, если параметры надлежащего запроса являются set so), но это может быть любой другой формат, который принимает jQuery. Для получения более подробной информации см. $.ajax's dataType parameter's doc.

Другое - менее приятное - решение заключается в том, чтобы работать с обработкой данных после запроса (код в функции success) и получать сложными средствами часть информации, которую вы действительно ищете.Я бы не рекомендовал его, так как notification_okvalue.php выводит фактический HTML. В вашей нынешней ситуации было бы довольно быстро реализовать надежную систему, как описано выше. Не нужно беспокоиться о переходе в пустую структуру HTML.

+0

Спасибо за ваш ответ, я обновил свой вопрос, добавил EDIT, чтобы уточнить, что мне нужно. – Alfox

0

ваш notification_okvalue.php ничего на ответ не смывать, поэтому реакция показывает весь код PHP, если вы задумали написать маркер на ответ, вы должны упростили свой notification_okvalue. PHP код не содержит ничего, кроме только строку ниже:

<?php echo $_POST["token"];?> 
Смежные вопросы