jQuery AJAX POST请求错误传递值

时间:2016-04-13 12:20:40

标签: javascript php jquery ajax firebase

我有两个简单的php页面:

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写的。

3 个答案:

答案 0 :(得分:0)

我认为将POST数据构造为查询字符串是错误的。比较this question

如果您只使用数据对象,可能会取得更大的成功:

var postData = data;
postData.token = 22;

然后在你的$ .post:

data: postData

这样,令牌应该正确到达。尽管如此,你可能仍会得到整个notification_okvalue.php作为回应。

答案 1 :(得分:0)

AJAX请求只是一个隐藏的经典客户端请求。这意味着它无法获得比使用浏览器加载页面所获得的更多或更少的内容。正在检索的数据是服务器在给定URL处返回的原始代码,包括HTML和放在那里的任何其他类型的代码。

如果你想创建一个有效的系统,例如,使用JSON结构(这将允许你简化请求后的数据处理),服务器必须在设置内容后返回一个只包含JSON代码的空白页面-type标头。例如,如果您的服务器运行PHP代码:

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

实际返回是一个必须在JS代码中解析才能被正确解释的字符串(如果设置了正确的请求参数,这项工作默认由jQuery完成),但它可以是jQuery接受的任何其他格式。有关详细信息,请参阅$.ajax的{​​{3}}。

另一个 - 不太令人愉快的解决方案是处理您的请求后数据处理(success函数中的代码),并通过复杂的方式获取您正在寻找的信息部分。我不推荐它,因为notification_okvalue.php输出没有实际的HTML。在您目前的情况下,如上所述实现强大的系统将非常快。没有必要打扰导航到空的HTML结构。

答案 2 :(得分:0)

你的 notification_okvalue.php 没有在响应中刷新任何内容,这就是响应显示整个php代码的原因,如果你打算在响应中写入令牌,你应该已将您的 notification_okvalue.php 代码简化为仅包含以下内容的其他内容:

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