嘿所有我想弄清楚如何获取通过php脚本中的ajax json发送的表单值。
$.ajax
({
type: "POST",
url: "http://www.xxx.com/cart/gateway",
dataType: 'json',
async: false,
contentType: "json",
data: JSON.stringify({ "unique_id": $("#order_unique_id").val(), "name_on_card" : $("#name_on_card").val(), "card_number" : $("#card_number").val(), "expiry_date" : $("#expiry_date").val(), "cvv_code" : $("#cvv_code").val() }),
success: function (data) {
if (data && data != null && data["success"] != null && data["orderid"]) {
processSuccess(data["orderid"]);
} else if (data && data != null && data["error"] != null) {
processError(data["error"]);
} else {
processError('unknown');
}
processing = false;
}
})
目前它有一个错误,但这只是因为它从表单中查找POST值。这是代码:
public function __construct(&$page, $params) {
$page->cart = new theCart();
$page->cart->set_form();
switch($action){
case 'gateway':
$this->checkoutCart($page);
break;
...}
function set_form()
{
$this->setFormValue('b_email');
$this->setFormValue('b_first_name');
$this->setFormValue('b_last_name');
.....etc etc
//ADDED 7/25/2012
$this->setFormValue('name_on_card');
$this->setFormValue('card_number');
$this->setFormValue('expiry_date');
$this->setFormValue('cvv_code');
$this->setFormValue('order_unique_id');
$this->verified = false;
}
function setFormValue($name){
if(isset($_POST[$name])){
$this->$name = trim($_POST[$name]);
}
}
private function checkoutCart(&$page){
$page->part->body->content_html = $this->pPay($page, $this->getPay());
}
private function getPay(){
//echo 'getP== ' . json_decode( $_POST[ 'unique_id' ], true );
echo 'getP== ' . $_POST['unique_id'];
return array(
'unique_id' => $_POST['unique_id'],
'name_on_card' => $_POST['name_on_card'],
'card_number' => $_POST['card_number'],
'expiration_date' => $_POST['expiry_date'],
'cvv_code' => $_POST['cvv_code']
);
}
我上面的 $ _ POST ['unique_id'] 没有任何价值。
原始邮政编码是:
$.post("http://www.xxx.com/cart/gateway",
{
unique_id:$("#order_unique_id").val(),
name_on_card:$("#name_on_card").val(),
card_number:$("#card_number").val(),
expiry_date:$("#expiry_date").val(),
cvv_code:$("#cvv_code").val()
},
function(data) {
if (data && data != null && data["success"] != null && data["orderid"]) {
processSuccess(data["orderid"]);
} else if (data && data != null && data["error"] != null) {
processError(data["error"]);
} else {
processError('unknown');
}
processing = false;
},
"json"
);
但是这不起作用,因为它无法正确格式化(它寻找一个json响应......似乎把它放进去了?blah = blah& blah = blah .... **但确实产生了值它正在寻找代码的$ .POST部分..但如果错误不是想要的格式(json),它就毫无价值。
我怎样才能纠正这种情况?
答案 0 :(得分:0)
如果data
是字符串,则它应该是查询字符串。 JSON.stringify
将其转换为JSON。您只需传递data
一个对象,就可以为您处理转换为查询字符串。
编辑:换句话说,改变:
data: JSON.stringify({ "unique_id": $("#order_unique_id").val(), "name_on_card" : $("#name_on_card").val(), "card_number" : $("#card_number").val(), "expiry_date" : $("#expiry_date").val(), "cvv_code" : $("#cvv_code").val() }),
到
data: { "unique_id": $("#order_unique_id").val(), "name_on_card" : $("#name_on_card").val(), "card_number" : $("#card_number").val(), "expiry_date" : $("#expiry_date").val(), "cvv_code" : $("#cvv_code").val() },
答案 1 :(得分:0)
PHP期望表单编码数据,(application / x-www-form-urlencoded)。
不要将JSON作为dataType传递:
$.post("http://www.xxx.com/cart/gateway",
{
unique_id:$("#order_unique_id").val(),
name_on_card:$("#name_on_card").val(),
card_number:$("#card_number").val(),
expiry_date:$("#expiry_date").val(),
cvv_code:$("#cvv_code").val()
},
function(data) {
if (data && data != null && data["success"] != null && data["orderid"]) {
processSuccess(data["orderid"]);
} else if (data && data != null && data["error"] != null) {
processError(data["error"]);
} else {
processError('unknown');
}
processing = false;
}
// don't do this
// ,"json"
);
答案 2 :(得分:0)
由于您在请求正文中传递JSON而不是发送post vars,因此您需要从请求正文中获取json,解析它,然后从中提取值。
$request_body = file_get_contents('php://input');
$json = json_decode($request_body);
// use $json.unique_id