2014-06-13 40 views
0

这是我在javascript函数:传递JSON到PHP

function callRemoteService(requestId, sObjectId, bObjectId) { 
$.ajax({ 
    url: "../../../serviceRemoteEngine.php", 
    dataType: "json", 
    contentType: "application/json", 
    type: "POST", 
    timeout: 1000, 
    data: JSON.stringify({"requestId":requestId,"SOobjectId":sObjectId,"SBobjectId":bObjectId}), 
    success: function(remoteResponse){ 
     alert(remoteResponse.msg); 
    } 
}); 
} 

这是serviceRemoteEngine.php

echo json_encode(array("msg" => $_POST["SOobjectId"])); 

的函数调用这些参数:

callRemoteService('remove', 15, 0) 

事情是,而不是看到15在警报消息,null dis代替。

但是,当我改变PHP文件到:

echo json_encode(array("msg" => "message")); 

“消息” 文本显示与JS警报。

为什么?

回答

1

PHP预计发布/获取请求具有key=value对。你正在发送一个裸线,所以它只是value。由于没有密钥,PHP不能(也不会)将任何东西放入$ _POST,因为没有密钥来附加value

尝试

data: {foo: JSON.stringify(...)} 

echo $_POST['foo'] 

代替。

+0

不太确定我跟着怎么'阵列(“味精” => $ _ POST [“SOobjectId”])'只是一个空值? – JakeGould

+0

错误代码。意外的“:”,如预期的那样... – Sates

2

发送ajax请求时,不需要调用JSON.stringify(),因为$.ajax()函数需要参数的关联数组而不是字符串。

function callRemoteService(requestId, sObjectId, bObjectId) { 
    $.ajax({ 
     url: "../../../serviceRemoteEngine.php", 
     dataType: "json", 
     contentType: "application/json", 
     type: "POST", 
     timeout: 1000, 
     data: {"requestId":requestId,"SOobjectId":sObjectId,"SBobjectId":bObjectId}, 
     success: function(remoteResponse){ 
      alert(remoteResponse.msg); 
     } 
    }); 
} 
+0

这两个方面都没有改变......答案保持不变。 – Sates

0

您的JSON PHP是这样的:

echo json_encode(array("msg" => "message")); 

但你应该看到,如果加入适量的JSON头将有助于清楚的事情了。就像这样:

$json_data = json_encode(array("msg" => "message")); 
header('X-JSON: (' . $json_data . ')'); 
header('Content-type: application/x-json'); 
echo $json_data; 

此外,在阅读您的问题再次,你似乎是想获得$_POST["SOobjectId"]立即&再发送,早通过JSON?你确定$_POST包含任何东西吗?在你的PHP文件中,你做任何事情之前,这样做:

echo '<pre>'; 
print_r($_POST); 
echo '</pre>'; 

还是这样做了$_REQUEST,看看数据传输:

echo '<pre>'; 
print_r($_REQUEST); 
echo '</pre>'; 

也许你需要做到这一点在你的PHP文件。通过file_get_contents('php://input')获取原始$_POST数据,然后对其进行解码并进行处理。我所有的改造,包括这样的想法,下面:

$json_decoded_array = json_decode(file_get_contents('php://input'), true); 

$json_data = json_encode(array("msg" => $json_decoded_array['SOobjectId'])); 
header('X-JSON: (' . $json_data . ')'); 
header('Content-type: application/x-json'); 
echo $json_data; 
+0

无论如何,这段代码将显示“消息”,就像我的行一样。结果是一样的。 – Sates

+0

@ user3027309好的,最后的想法已到位。我现在得到你的代码:JavaScript将POST数据发送给PHP,然后将其反弹回JavaScript。因此,您需要实际解析PHP中的原始POST数据以提取所需的值。看看我最近的编辑。 – JakeGould