1

クロスドメイン 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である postman を使用してみてください。に示すように、適切なキーと値のペアを指定しdataます。

null最初の送信時と2 番目の送信時に表示されますselected

私は何を見逃していますか。

編集

<?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 配列を使用しました。

4

2 に答える 2

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 はこれを適切にエンコードします。

于 2013-04-16T07:04:27.033 に答える