php - 在 PHP 中模拟 jQuery.ajax 请求

标签 php jquery

我必须在 PHP 中模拟 AJAX 请求,就像在 jQuery 中一样。我当前的代码在这里:

原始 AJAX 调用(不得修改)

$.ajax({
    type: "POST",
    url: "/someFile.php",
    data: data,
    success: function(response) {
        some_code_here;
    },
    error: function() {
        some_code_here;
    }
});

当前 PHP 代码 - 尝试模拟上面的 JS 代码行为

function _misc_test() {

    $data = json_decode("xxx"); // The "xxx" is placeholder for the same string, as is in data var in JS above

    $ajaxResponse = _make_post_request('/someFile.php', $data);
    print_r($ajaxResponse);
}

function _make_post_request($url, $data) {
    $ch = curl_init($url);

    curl_setopt($ch, CURLOPT_POST, TRUE);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    $response = curl_exec($ch);
    curl_close($ch);
    return $response;
}

不幸的是,PHP 代码似乎不会生成与 JS 代码完全相同的数据包 - 这正是我所需要的。有人可以帮我吗?

<小时/>

编辑:也许很重要,JS 中的 data 变量保存像这样的复杂 JS 对象:

{"options":{"userIP":"89.102.122.16","playerType":"flash","playlistItems":[{"Type":"Archive","Format":"MP4_Web","Identifier":"209 452 80139\/0042","Title":"Nezn\u00e1m\u00ed hrdinov\u00e9","Region":"","SubtitlesUrl":"http:\/\/img2.ceskatelevize.cz\/ivysilani\/subtitles\/209\/209452801390042\/subtitles-1.txt","Indexes":null,"Gemius":{"Param":[{"Name":"materialIdentifier","Value":"209 452 80139\/0042"},{"Name":"testParam","Value":"testValue"}]}}],"previewImageURL":null}}

最佳答案

在js中:data: $('form').serialize();

在 PHP 中: How to post data in PHP using file_get_contents?

$jsonstr = '{"options":{"userIP":"89.102.122.16","playerType":"flash","playlistItems":[{"Type":"Archive","Format":"MP4_Web","Identifier":"209 452 80139\/0042","Title":"Nezn\u00e1m\u00ed hrdinov\u00e9","Region":"","SubtitlesUrl":"http:\/\/img2.ceskatelevize.cz\/ivysilani\/subtitles\/209\/209452801390042\/subtitles-1.txt","Indexes":null,"Gemius":{"Param":[{"Name":"materialIdentifier","Value":"209 452 80139\/0042"},{"Name":"testParam","Value":"testValue"}]}}],"previewImageURL":null}}';

print_r(
    $data = json_decode($jsonstr ,true)
);

$data_url = http_build_query ($data);
$data_url = str_replace("amp;","",$data_url); //fix for &amp; to &


$data_len = strlen ($data_url);
$url      = 'http://domain.com/returnPost.php';

$result =  file_get_contents ($url, false, 
    stream_context_create (
        array ('http'=>
            array ('method'=>'POST'
            , 'header'=>"Connection: close\r\nContent-Length: $data_len\r\n"
            , 'content'=>$data_url
            ))
        )
    );

print_r(
  $result
);

在 returnPost.php

print_r($_POST);

关于php - 在 PHP 中模拟 jQuery.ajax 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5918401/

相关文章:

php - Auth()::user() 在 Laravel 中的多重身份验证中不起作用

没有目录树的 Php zip 文件

当 <p> 给定高度值时,jQuery jScrollPane 在 <div> 上不起作用

javascript - onclick 事件在 IE 8 中不起作用

php - 使用 MySQL 数据库中的记录作为值创建复选框列表

PHP如何从多维数组中删除键?

javascript - 将字母表中的所有字母替换为另一个字母

javascript - 如何使用 jquery 将 css 类应用于某些元素?

javascript - 插入父帖子vue js的子评论

javascript - jQuery:如果子项包含文本编号范围,则隐藏父项?