2013-04-16 64 views
1

我正在尝试使用代理脚本发送发布数据以执行跨域ajax。使用curl和ajax发送发布数据

var data = "url=http://www.fhm.com.ph/templates/100sexiestwomen2013/ajax/set.php&id=13&index=0&action=add"; 
$.ajax({ 
    url: "proxy.php", 
    data: data, 
    type: "POST", 
    success: function(data, textStatus, jqXHR) { 
     console.log('Success ' + data); 

    }, 
    error: function(jqXHR, textStatus, errorThrown) { 
     console.log('Error ' + jqXHR); 
    } 
}); 

然后我尝试解析数据以用作我的代理脚本中的url和参数。

<?php 
    //set POST variables 
    $url = $_POST['url']; 
    unset($_POST['url']); 
    $fields_string = ""; 
    //url-ify the data for the POST 
    foreach($_POST as $key=>$value) { 
      $fields_string .= $key.'='.$value.'&'; 
    } 
    $fields_string = rtrim($fields_string,'&'); 
    //open connection 
    $ch = curl_init(); 
    //set the url, number of POST vars, POST data 
    curl_setopt($ch,CURLOPT_URL,$url); 
    curl_setopt($ch,CURLOPT_POST, 1); 
    curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    //execute post 
    $result = curl_exec($ch); 
    //close connection 
    curl_close($ch); 

但事实证明,它不会正确发布数据。

尝试使用邮递员,铬扩展POSTMAN。并给出正确的键值对,如data所示。

它会给你null第一次提交和selected秒。

我错过了什么。

EDIT

<?php 
    //set POST variables 
    $url = $_POST['url']; 
// unset($_POST['url']); 
// $fields_string = ""; 
// //url-ify the data for the POST 
// foreach($_POST as $key=>$value) { 
//   $fields_string .= $key.'='.$value.'&'; 
// } 
// $fields_string = rtrim($fields_string,'&'); 
    //open connection 
    $ch = curl_init(); 
    //set the url, number of POST vars, POST data 
    curl_setopt($ch,CURLOPT_URL,$url); 
    curl_setopt($ch,CURLOPT_POST, 1); 
    curl_setopt($ch,CURLOPT_POSTFIELDS,$_POST); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    //execute post 
    $result = curl_exec($ch); 
    //close connection 
    curl_close($ch); 

如在编辑中所示,移除我手工构建,代替我用POST阵列。

回答

1

你必须正确编码数据

var data = "url=" + encodeURIComponent("http://www.fhm.com.ph/templates/100sexiestwomen2013/ajax/set.php")+"&id=13&index=0&action=add"; 

既然你的URL参数包含在网址中的特殊含义的字符。

+0

你试过了吗?似乎它不工作太.. –

+0

@JoeySalacHipolito好吧我现在看到发生了什么事情,我认为这只是一个参数。 – Musa

+0

我认为它仍然不起作用,你也可以试试它,也许我会捣鼓它,也想捣鼓它呢? –

2

使用对象在JavaScript的data,让jQuery将妥为编码:

var data = { 
    url: "http://www.fhm.com.ph/templates/100sexiestwomen2013/ajax/set.php&id=13", 
    index: 0, 
    action: "add" 
}; 

而在PHP中,使用CURLOPT_POSTFIELDS数组:

curl_setopt($ch,CURLOPT_POSTFIELDS,$_POST); 

PHP将编码这适当。