0

我希望能够在 PHP 中使用 AJAX 完成与我在 JS 中所做的相同的事情。这可能吗?

例如,考虑以下代码:

$.ajax({
        async: false,
        url: "/path/to/script/script.php",
        type: "post",
        data: {
            'arg1':'arg_val',
            'oper':'get_data',
            'arg2':'arg_val_2',
            'id_number':'223'
        },
        dataType: 'json',
        success: function(data){
            est_data = data[0];
        },
        error: function(jqXHR, textStatus, errorThrown){
            return jqXHR['responseText'];
        }
    });

在 PHP 中我想做同样的事情:将一些 post 变量传递给script.php并让它返回字符串响应,这是我在success上面代码中的函数中得到的。

我做了一些研究,我认为我应该能够使用http_post_fields来做到这一点,但我得到了这个回应:

HTTP/1.1 200 OK 日期:2012 年 9 月 19 日星期三 15:42:01 GMT 服务器:Apache/2.2.20 (Ubuntu) X- Powered-By:PHP/5.3.6-13ubuntu3.9 设置 Cookie:53f143479d91e79747661fcf2777a0fa=5kidtm7rcdn24o33amljgg9 ; 路径=/ 变化:接受编码内容长度:15 内容类型:文本/html 未授权。

有人知道怎么做吗?

谢谢!!

4

3 回答 3

2

我认为 curl 在这种情况下将是你最好的朋友。您可以使用它进行 POST 请求并发送数据,模拟正在提交的表单。

看看这篇文章

$url = 'http://example.com/request.php';
$fields = array(
            'username' => urlencode($last_name),
            'password' => urlencode($first_name),
        );

//url-ify the data for the POST
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
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, count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);

//execute post
$result = curl_exec($ch);

//close connection
curl_close($ch);
于 2012-09-19T15:58:48.840 回答
1

是的,您需要在stream_context_create()的帮助下使用file_get_contents( ) 。您也可以使用curl

以下是使用 file_get_contents 的示例:

$options = array(
  'http'=>array(
    'method'=>"POST",
    'header'=>
      "Accept-language: en\r\n".
      "Content-type: application/x-www-form-urlencoded\r\n",
    'content'=>http_build_query(
        array(
            'arg1'=>'arg_val',
            'oper'=>'get_data',
            'arg2'=>'arg_val_2',
            'id_number'=>'223'
        ),'','&'
    )
));
$context = stream_context_create($options);
$refno = file_get_contents('/path/to/script/script.php',false,$context);
$refno = json_decode($refno, true);
var_dump($refno); // juse use $refno as an array.
于 2012-09-19T16:02:00.600 回答
1

你当然可以这样做。您需要做的就是使用 PHP 库(例如 curl)向脚本发送 POST。AJAX 在这方面没有什么特别之处,它只是用 Javascript 编写的。归根结底,它只是一个 HTTP 响应/请求。

于 2012-09-19T15:58:54.707 回答