即使我手动分配它进行测试,为什么这个返回不明?

时间:2014-03-02 18:17:23

标签: php json post curl http-post

这总是会引发错误,即这些参数都不是有效的。例如:Undefined index: dataNL

接收代码:

$ajax_arrayBTF = $_POST['dataBTF'];
$ajax_arrayLI = $_POST['dataLI'];
$ajax_arrayLS = $_POST['dataLS'];
$ajax_arrayNL = $_POST['dataNL'];
$agent_id = $_POST['agent'];

这是我正在使用的调用代码:

$data = array(
    "dataBTF" => "0",
    "dataNL" => "0",
    "dataLS" => "0",
    "dataLI" =>  "0",
    "agent" => "53" 
);

$data_string = json_encode($data);                                                                                   
echo  $data_string;
$ch = curl_init('http://localhost/site1/backend/scripts/oppCAL.php');                                                                      
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                                                                     
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);                                                                  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);    
curl_setopt($ch, CURLOPT_HTTPHEADERS, array('Content-Type: application/json'));                                                                  
echo curl_exec($ch);

我不明白为什么会发生这种情况,因为我手动分配它。所以它是有效的。 echo $data_string;显示

{"dataBTF":"0","dataNL":"0","dataLS":"0","dataLI":"0","agent":"53"}

就像它应该......我决定使用JSON,但即使这样也行不通。 CURL已启用。我在这里缺少什么?

编辑:

当ajax打电话时没有问题。我的ajax是:

$.ajax(
          {
            type: 'post',
            url: 'scripts/oppCAL.php',
            data: 
            {
              dataBTF:  $array_jsBTF,
              dataLI:   $array_jsLI,
              dataLS:   $array_jsLS,
              dataNL:   $array_jsNL,
              agent:    $agent_id
            },
            success: function(e) 
            {
              console.log("done:");

            } //success
          }); // ajax

1 个答案:

答案 0 :(得分:1)

PHP不解析JSON正文数据,只进行编码,就像你的jQuery ajax调用发送一样。它看起来像这样:

dataBTF=0&dataLI=0&dataLS=0&dataNL=0&agent=0

接收JSON时,您可以使用类似的内容来获取数据:

$body = file_get_contents('php://input');
$data = json_decode($body, true);