2015-07-04 116 views
1

我试图将代码从JQuery转换为PHP来执行json POST请求到远程服务器。JSON - 将代码从JQuery转换为PHP

我jQuery代码是:

$(document).ready(function() { 
    $('#button').click(
     function() { 
      $.ajax({ 
       method: "POST", 
       url: "http://http://www.fedex.com/trackingCal/track", 
       data: { 
        action: "trackpackages", 
        format: "json", 
        locale: "it_IT", 
        version: "1", 
        data: '{"TrackPackagesRequest":{"appType":"WTRK","uniqueKey":"","processingParameters":{},"trackingInfoList":[{"trackNumberInfo":{"trackingNumber":"780909642310","trackingQualifier":"","trackingCarrier":""}}]}}' 
       } 
      }) 
      .done(function(msg) { 
       console.log(msg); 
      }); 
     } 
    ) 
}); 

我想从PHP做相同的POST请求调用,但我不能。

我的PHP代码:

$data = array("action" => "trackpackages", "data" => array ('TrackPackagesRequest' => array('appType' => 'WTRK', 'uniqueKey' => '', 'processingParameters' => '{}', 'trackingInfoList' => array(array('trackNumberInfo' => array('trackingNumber' => '780909642310', 'trackingQualifier' => '', 'trackingCarrier' => ''))))), 'format' => 'json', 'locale' => 'it_IT', 'version' => '1'); 


$data_string = json_encode($data); 

$ch = curl_init('http://www.fedex.com/trackingCal/track'); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json', 
    'Content-Length: ' . strlen($data_string)) 
); 


$result = curl_exec($ch); 
echo $result; 

远程服务器没有适当的反应,而且似乎没有得到正确编码的数据。有人可以帮我解决这个问题吗?

谢谢!

+0

在jQuery代码的'data'参数里面'data'只是一个字符串(看起来像JSON),而在你的PHP代码它是一个对象。也许尝试调整。 – Sirko

+0

感谢您的支持。我试过了你的建议,但还是不行。 –

回答

0

这个工作对我来说:

<?php 

    /* You need to define that parameter separately, 
    * as it is supposed to be passed as a JSON String. 
    */ 
    $data_field = array(
     'TrackPackagesRequest' => array(
      'appType' => 'WTRK', 
      'uniqueKey' => '', 
      'processingParameters' => (Object)array(), // Will be stringified as {} 
      'trackingInfoList' => array(
       array(
        'trackNumberInfo' => array(
         'trackingNumber' => '780909642310', 
         'trackingQualifier' => '', 
         'trackingCarrier' => '' 
        ) 
       ) 
      ) 
     ) 
    ); 

    $data = array(
     "action" => "trackpackages", 
     'format' => 'json', 
     'locale' => 'it_IT', 
     'version' => '1', 
     "data" => json_encode($data_field) // Insert the String 
    ); 

    $ch = curl_init('http://www.fedex.com/trackingCal/track'); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    // http_build_query will convert your parameters to param1=val1&param2=val2... 
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

    $result = curl_exec($ch); 
    echo $result; 

?> 
+0

谢谢Blex,您的解决方案就像一个魅力! –