通过Javascript调用在php上获取Ajax POST数据

10

首先,我承认自己是一个新手,对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代码连接数据库

PHP代码

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

*我的问题*:

  • 我不清楚如何在PHP中使用POST方法发送数据?我尝试了$_POST['']方法和其他许多方法。
  • 我正在使用eclipse作为PHP框架。因此,当我发送数据时无法调试它。通常情况下,我能够调试我的代码,但无法从远程调试。为此,我也对php.ini文件进行了更改。

如何在PHP代码中获取POST数据的响应?

如何通过远程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: JSON.stringify(ko.toJS(params)), 替换为 data: params, - Dave Chen
为了调试这个问题,我建议使用FireBug + FirePHP扩展。 - k102
@k102,抱歉我不熟悉firePHp...我认为在这里应该使用firebug来帮助我。根据我的了解。 - Jignesh.Raj
4个回答

7

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

为了实现这个目标,您需要访问原始的POST数据。在PHP中,可以通过以下方式来实现:

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

您可以在封装器文档中了解更多关于php://input的内容。

当然,从客户端的角度来看,数据需要使用POST方法并作为原始数据发送,即作为字符串。您可以使用JSON.stringify()从对象中获取字符串,这是您已经在做的事情。

如果您传递一个对象,jQuery将使用查询字符串格式在内部将其转换为字符串。有关此问题的更多信息,请参见$.ajax的jQuery文档(最重要的选项是dataprocessData)。


嗨,谢谢这个。通过这种方式,我在 PHP 上得到了数据,就像这样 "{"ClientData":["4","kamlesh","KAM","Junagadh","me","SANTA ROSA","76220","kamlesh.vadiyatar@gmail.com","9998305904",false]}",现在,我该如何逐个获取元素? - Jignesh.Raj
嗨,谢谢这个。通过这种方式,我在 PHP 上得到了数据,就像这样 "{"ClientData":["4","kamlesh","KAM","Junagadh","me","SANTA ROSA","76220","kamlesh.vadiyatar@gmail.com","9998305904",false]}",现在,我该如何逐个获取元素? - Jignesh.Raj
我认为你已经在你的PHP代码中使用json_decode()完成了这个。 - hegemon
print_r(json_decode('{"ClientData":["4","kamlesh","KAM","Junagadh","me","SANTA ROSA","76220","kamlesh.vadiyatar@gmail.com","9998305904",false]}')); -- 运行正常! - hegemon
我尝试了 $ClientData = json_decode(file_get_contents('php://input')); - Jignesh.Raj
显示剩余3条评论

3

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

使用Firebug或Chrome开发工具分析ajax请求并查看发送的数据


我需要传参吗?还是可以不传? - Jignesh.Raj
1
数据:ko.toJS(params),然后在 PHP 中使用 var_dump($_POST) 查看您获取了哪些数据。 - Alex Barroso
请问您能再帮我一个忙吗?我有一组数据数组。那么,我该如何逐个获取元素的值呢? - Jignesh.Raj
1
你可以直接对$_POST进行foreach操作,或者将数据更改为data: {ko: ko.toJS(params)},然后使用$_POST ['ko']。 - Alex Barroso
我用这种方式做,但是出现了错误:“未定义的索引:ko”,我也为ClientData做了同样的事情...并且我得到了相同的错误..请问您能否告诉我关于foreach循环的知识。 - Jignesh.Raj

-1
使用这个简单的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

-1

在 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>";
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接