【问题标题】:Get Ajax POST data on php via Javascript call通过 Javascript 调用在 php 上获取 Ajax POST 数据
【发布时间】:2013-05-08 06:10:11
【问题描述】:

首先我承认我是php的新手, 我在客户端使用 jquery(knockout js),在服务器端使用 PHP。我的代码。

客户端:我正在使用knockout js(Javascript)。调用我的 PHP 服务。

我的代码:

self.VMSaveEditUserMode = function () {
   try {
      var params = { "ClientData": [controllerVM_.ClientID(), controllerVM_.VMList[0].ClientName(), controllerVM_.VMList[0].ShortName(), controllerVM_.VMList[0].Address(), controllerVM_.VMList[0].CreatedBy(), controllerVM_.VMList[0].CityName(), controllerVM_.VMList[0].PostalCode(), controllerVM_.VMList[0].ContactEmail(), controllerVM_.VMList[0].ContactPhone(), controllerVM_.VMList[0].IsCorporate()] };

      $.ajax({
         type: "POST",
         url: URL + "index.php/phpService/SaveClient/" + controllerVM_.TokenKey(),
         data: JSON.stringify(ko.toJS(params)),
         contentType: "application/json",
         async: true,
         dataType: 'json',
         cache: false,
         success: function (response) {
         },
         error: function (ErrorResponse) {
            if (ErrorResponse.statusText == "OK") {
            }
            else {
               alert("ErrorMsg:" + ErrorResponse.statusText);
            }
         }
      });
   }
   catch (error) {
      alert("Catch:" + error);
   }
}

服务器端我的代码,我正在使用这个 PHP 代码来连接 DB。

PHP 代码:

public function SaveClient($userToken)
    {   
       $value = json_decode($Clientdata);
       echo $value->ClientData[0];
    }

*我的问题*:

  • 我不清楚如何在 PHP 中发布数据?我尝试了$_POST[''] 方法以及更多方法。
  • 我使用 eclipse 作为 php 框架。所以,当我发布数据时无法调试它。正常模式下我可以调试我的代码。但不能远程调试。因为我也对php.ini 文件进行了更改。

如何在 php 代码中获取 Post Data 的响应?

如何通过远程post调试?

我的请求示例:

假设我使用:

对于,data: params,只有当时我的请求格式是。

ClientData%5B%5D=4&ClientData%5B%5D=kamlesh&ClientData%5B%5D=KAM&ClientData%5B%5D=Junagadh&ClientData%5B%5D=me&ClientData%5B%5D=SANTA+ROSA&ClientData%5B%5D=76220&ClientData%5B%5D=kamlesh.vadiyatar%40gmail.com&ClientData%5B%5D=9998305904&ClientData%5B%5D=false

给,data: JSON.stringify(ko.toJS(params)),

{"ClientData":["4","kamlesh","KAM","Junagadh","me","SANTA ROSA","76220","kamlesh.vadiyatar@gmail.com","9998305904",false]}

【问题讨论】:

  • 尝试用data: params,替换data: JSON.stringify(ko.toJS(params)),
  • 为了调试这个我推荐 FireBug + FirePHP 扩展
  • @k102,对不起,但我不熟悉 firePHp ......我不这么认为,这里的 firebug 应该可以帮助我。据我所知。

标签: javascript php sql-server knockout.js


【解决方案1】:

如果我理解正确,您需要创建一个能够从客户端接收类似 REST 的请求的 PHP 服务。

为了做到这一点,您需要访问原始 POST 数据。在 PHP 中它是这样完成的:

$ClientData = file_get_contents('php://input');

您可以在wrappers documentation 中阅读有关php://input 的更多信息。

当然,从客户端来说,数据需要使用 POST 方法和作为原始数据(即字符串)发送。您可以使用 JSON.stringify() 从对象中获取字符串,您已经这样做了。

如果你传递一个对象,它会在内部被 jQuery 使用查询字符串格式转换为字符串。在jQuery documentation for $.ajax 中了解更多信息(最重要的选项是data 和processData)。

【讨论】:

  • 嗨..谢谢这个...通过这种方式我得到了 php 上的数据...像这样 "{"ClientData":["4","kamlesh","KAM", "Junagadh","me","SANTA ROSA","76220","kamlesh.vadiyatar@gmail.com","9998305904",false]}" 现在,我怎样才能得到一个一个元素?
  • 嗨..谢谢这个...通过这种方式我得到了 php 上的数据...像这样 "{"ClientData":["4","kamlesh","KAM", "Junagadh","me","SANTA ROSA","76220","kamlesh.vadiyatar@gmail.com","9998305904",false]}" 现在,我怎样才能得到一个一个元素?
  • 我想你已经在 PHP 代码中使用 json_decode() 做到了
  • print_r(json_decode('{"ClientData":["4","kamlesh","KAM","Junagadh","me","SANTA ROSA","76220","kamlesh .vadiyatar@gmail.com","9998305904",false]}')); -- 工作正常!
  • 我试过 $ClientData = json_decode(file_get_contents('php://input'));
【解决方案2】:

只需将 ajax 数据参数作为对象传递,不要将其转换为 JSON。然后在 PHP 中直接使用 $_POST 。

使用 firebug 或 chrome 开发工具分析 ajax 请求并查看发送了哪些数据

【讨论】:

  • 我必须通过参数,否则可以吗?
  • data: ko.toJS(params) 然后在 PHP 上做一个 var_dump 到 $_POST 看看你得到了哪些数据
  • 你能再帮我一件事吗...我有数据数组。所以,我怎样才能一个一个地获取元素值?
  • 您可以直接对 $_POST 执行 foreach 或将 data todo 更改为 data: {ko: ko.toJS(params)} 然后使用 $_POST['ko']
  • 我这样做并得到错误:“未定义的索引:ko”以及我为 ClientData 制作的......我得到了同样的错误......你能告诉我有关 foreach 循环的信息吗?
【解决方案3】:

使用这个简单的 jquery 函数来完成你的任务

$.ajax({           
            type: "POST",  
            url:"scripts/dummy.php",  
            data:"tbl="+table,
            dataType:"json", //if you want to get back response in json

            beforeSend: function()
            {                   

            },
            success: function(resp)
            {               

            }, 

            complete: function()
            {

            },

            error: function(e)
            {  
            alert('Error: ' + e);  
            }  

    }); //end Ajax

【讨论】:

    【解决方案4】:

    在 PHP 中使用:

    if(isset($_POST['ClientData'])){
       $client_data = $_POST['ClientData']
    }
    

    现在$client_data 变量应该包含array。

    出于调试目的,您可以使用 php 的内置 print_r() 函数。这很方便。

    这是一个例子:

    //make sure it's post request
    if(isset($_POST)){
       //now print the array nicely
       echo "<pre>";
       print_r($_POST);
       echo "</pre>";
    }
    

    【讨论】:

      猜你喜欢
      • 2018-06-20
      • 2018-06-03
      • 1970-01-01
      • 2014-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多