请参阅PHP脚本中的jQuery post数据

时间:2009-08-07 05:43:26

标签: jquery cakephp

目前我正在开发一个基于ajax的Web应用程序来执行某些XHR。

我选择了CakePHP + jQuery来完成这些工作,除了这个小问题外,它们工作得非常好。

说,我创建一个有效的JSON表单的字符串==> {“test”:“你好世界”}

然后我调用jQuery的ajax方法将其发送到目标php页面:

jQuery.ajax
    ({
        type: 'POST',
        cache: false,
        async: false,
        timeout: 10000,
        url : 'http://localhost/method/',
        dataType : 'json',  //defines expected response datatype
        contentType : 'application/json', //defines request datatype
        data : { "test" : "hello world"},
        success : function(json)
        {
           //do some stuff here.
        }});

以前我尝试过这个带有空数据的ajax函数(即只使用数据:{}因为这是一个POST),它运行得很好;但是,现在我已经将一个json格式的数据添加到HTTP POST中,有没有办法从PHP脚本端引用它?

我试过了:data : { "data" : {"test" : "helloworld"}}

我使用PHP的isset [$ _ POST ['data']进行检查,结果是POST变量'data'未设置。

有人能给我一个解决这个问题的方法吗?非常感谢提前!!!

7 个答案:

答案 0 :(得分:4)

这可能就是你所追求的(来自http://www.factsandpeople.com/facts-mainmenu-5/26-html-and-javascript/89-jquery-ajax-json-and-php):

$(document).ready(function(){ 
  var data = 
  { 
    "sales": [ 
      { "firstname" : "John", "lastname" : "Brown" },
      { "firstname" : "Marc", "lastname" : "Johnson" }
    ] // end of sales array
  }
  var dataString = JSON.stringify(data);
  $.post('simpleformSubmit.php', { data: dataString}, showResult, "text");
});

PHP脚本(发布数据包含json结构):

<?php
  $logFile = 'logFile';
  $res = json_decode(stripslashes($_POST['data']), true);

  echo "sales1_lastname: ".$res['sales'][1]['lastname'];
?>

答案 1 :(得分:1)

看起来网址拼写错误了?

  

url : 'http://localhost/mehtod/'

而不是

  

url : 'http://localhost/method/'

有时最小的东西是最烦人的!

答案 2 :(得分:1)

我不确定设置内容类型是否与cake php有任何影响。

http://docs.jquery.com/Ajax/jQuery.ajax#options

  

将数据发送到服务器时,请使用此内容类型。默认为“application / x-www-form-urlencoded”,对大多数情况都适用。

通过将其设置为 application / json 可能会将其编码为不同,这就是为什么你没有在$ _POST数组中看到它

答案 3 :(得分:0)

数据将以通常与POST请求相关联的键/值格式进入PHP。 jQuery data值正是jQuery用来创建POST请求的内容......进入PHP $_POST数组的实际键/值对是你放在data中的内容。

对于您的代码,您的$_POST['test']值应为helloworld

答案 4 :(得分:0)

data数组中的每个键/值对都作为POST键/值对发送给PHP。所以在你的情况下:

echo $_POST['test']; // Echos "helloworld"

答案 5 :(得分:0)

来自jQuery文档(http://docs.jquery.com/Ajax/jQuery.ajax#options)的引用:

  

data - 要发送到服务器的数据。如果不是字符串,它将转换为查询字符串。它附加到GET请求的URL。请参阅processData选项以防止此自动处理。对象必须是键/值对。如果value是一个数组,则jQuery使用相同的键序列化多个值,即{foo:[“bar1”,“bar2”]}变为'&amp; foo = bar1&amp; foo = bar2'。

答案 6 :(得分:0)

仅供参考:JQuery改变了他们序列化发布数据的方式。

http://forum.jquery.com/topic/nested-param-serialization

您必须将“传统”设置设为true,其他方式

{值:[ “1”, “2”, “3”]}

将以

出现

值[] = 1&安培;值[] = 2及值[] = 3

而不是

值= 1&安培;值= 2及值= 3