Ajax Cakephp无法获取数据

Ajax Cakephp无法获取数据,ajax,cakephp,get,Ajax,Cakephp,Get,我试图将一个简单的字符串化int数组传递到json表达式中,并通过ajax发送。在我看来,从客户端到服务器的请求url和头看起来都很好,但是在Cake中,由于某种原因,请求->查询vardumps是空的 来自ajax的标题: Request URL:http://localhost/cakephp-2.2.5/paragraphs/sortPublished.json?[%221%22,%223%22,%222%22] Request Method:GET Status Code:200 OK

我试图将一个简单的字符串化int数组传递到json表达式中,并通过ajax发送。在我看来,从客户端到服务器的请求url和头看起来都很好,但是在Cake中,由于某种原因,请求->查询vardumps是空的

来自ajax的标题:

Request URL:http://localhost/cakephp-2.2.5/paragraphs/sortPublished.json?[%221%22,%223%22,%222%22]
Request Method:GET
Status Code:200 OK
Request Headersview source
Accept:application/json, text/javascript, */*; q=0.01
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:fi-FI,fi;q=0.8,en-US;q=0.6,en;q=0.4
Connection:keep-alive
Content-Type:application/json; charset=utf-8
Cookie:CAKEPHP=gu46lhu6lohe1hnr4vmeve23g1
DNT:1
Host:localhost
Referer:http://localhost/cakephp-2.2.5/paragraphs/edit/1
User-Agent:Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31
X-Requested-With:XMLHttpRequest
Query String Parametersview sourceview URL encoded
["1","3","2"]:
Response Headersview source
Connection:Keep-Alive
Content-Length:425
Content-Type:application/json; charset=UTF-8
Date:Mon, 13 May 2013 09:11:14 GMT
Keep-Alive:timeout=5, max=98
Server:Apache/2.4.3 (Win32) OpenSSL/1.0.1c PHP/5.4.7
X-Powered-By:PHP/5.4.7
还有Javascript

$(document).ready(function(){
$("#button").click(function() {
    var sortedParagraphs = $( "#sortable1" ).sortable('toArray');

    var key_value_pairs = [];
    var i = 0;
    $.each( sortedParagraphs, function(index, value) {
        key_value_pairs[index] = value;
    });

    $.ajax({
      url: define1,
      data: JSON.stringify(sortedParagraphs),
      dataType: "json",
      contentType: 'application/json; charset=utf-8',
      success: function(data) {
        alert(data);
      }
    });
});
});
对于我的业余爱好者来说,JSON的格式显然是正确的,我看不出url有任何问题,但请求->查询仍然会产生:

array(0) {
}

我一直在努力解决这个小问题,从感觉上来说,任何帮助都将不胜感激。

首先,您不需要“字符串化”变量,jQuery已经解决了这个问题

由于您正在对数组进行字符串化,jQuery将发送数组的文本字符串表示;i、 e.
“[“1”、“3”、“2”]”
。基本上,查询参数的名称是“[“1”、“3”、“2”]”,并且没有设置该值

接下来,由于您没有为发送的数据指定“名称”,CakePHP将没有可读取的查询参数

试试这个

$.ajax({
   url: define1,
   data: {paragraphs: sortedParagraphs},
   dataType: "json",
   contentType: 'application/json; charset=utf-8',
   success: function(data) {
     alert(data);
   }
 });
在你的控制器内

debug($this->request->query);
应该输出如下内容

array(
    'paragraphs' => array(
        (int) 0 => '1',
        (int) 1 => '3',
        (int) 2 => '2'
    )
)
额外简化 自
$(“#sortable1”).sortable('toArray')
已返回数组,您不必手动将结果转换为数组(使用
$。每个(…
),因此这可能会产生完全相同的结果:

$("#button").click(function() {
    $.ajax({
       url: define1,
       data: {paragraphs: $("#sortable1").sortable('toArray')},
       dataType: "json",
       contentType: 'application/json; charset=utf-8',
       success: function(data) {
         alert(data);
       }
     });
}

非常感谢!我一直在玩这个东西这么长时间了,迭代开始显示为不连贯的毫无意义的代码,但直到现在没有任何结果。谢谢你thaJeztah,你是最终的编码朋友:)@user2377105很高兴我能帮上忙!