当前位置: 首页 > 工具软件 > Json_LAMP > 使用案例 >

js值发送给php,将JSON数据从Javascript发送到PHP?

劳宇
2023-12-01

将JSON数据从Javascript发送到PHP?

如何将JSON数据从浏览器中的Javascript发送到服务器,然后让PHP在其中解析?

10个解决方案

56 votes

我在这里获得了很多信息,所以我想发布我发现的解决方案。

问题:从浏览器上的Javascript获取JSON数据到服务器,然后让PHP成功解析它。

环境:Windows上的浏览器(Firefox)中的Javascript。 LAMP服务器作为远程服务器:Ubuntu上的PHP 5.3.2。

什么有效(版本1):

1)JSON只是文本。 以某种格式的文本,但只是一个文本字符串。

2)在Javascript中,$_POST['json_string']给了我JSON字符串。

3)我使用Javascript中的AJAX XMLHttpRequest对象将数据发送到服务器:

request= new XMLHttpRequest()

request.open("POST", "JSON_Handler.php", true)

request.setRequestHeader("Content-type", "application/json")

request.send(str_json)

[... code to display response ...]

4)在服务器上,PHP代码读取JSON字符串:

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

这将读取原始POST数据。 现在,$_POST['json_string']包含来自浏览器的确切JSON字符串。

什么有效(版本2):

1)如果我想使用$_POST['json_string']请求标头,则需要创建"x=y&a=b[etc]"的标准POST字符串,以便在PHP获取它时,可以将其放入$_POST关联数组中。 因此,在浏览器中的Javascript中:

var str_json = "json_string=" + (JSON.stringify(myObject))

当我像上述版本1中一样通过AJAX / XMLHttpRequest发送str_json时,PHP现在将能够填充$ _POST数组。

显示$_POST['json_string']的内容将显示JSON字符串。 将$ _POST数组元素上的json_decode()与json字符串一起使用将正确解码该数据并将其放入数组/对象中。

我遇到的陷阱:

最初,我尝试发送带有application / x-www-form-urlencoded标题的JSON字符串,然后尝试立即从PHP的$ _POST数组中读取它。 $ _POST数组始终为空。 那是因为它期望格式为yval = xval&[rinse_and_repeat]的数据。 它没有找到这样的数据,只有JSON字符串,并且只是将其丢弃了。 我检查了请求标头,然后正确发送了POST数据。

同样,如果我使用application / json标头,则无法再次通过$ _POST数组访问发送的数据。 如果要使用application / json内容类型标头,则必须通过[php:// input,]而不是$ _POST访问PHP中的原始POST数据。

参考文献:

1)如何在PHP中访问POST数据:如何在PHP中访问POST数据?

2)有关application / json类型的详细信息,其中包含一些示例对象,这些示例对象可以转换为JSON字符串并发送到服务器:[http://www.ietf.org/rfc/rfc4627.txt]

kermit answered 2020-07-09T13:51:25Z

16 votes

使用jQuery的JavaScript文件(更干净,但库开销更大):

$.ajax({

type: 'POST',

url: 'process.php',

data: {json: JSON.stringify(json_data)},

dataType: 'json'

});

PHP文件(process.php):

directions = json_decode($_POST['json']);

var_dump(directions);

请注意,如果您在JavaScript中使用回调函数:

$.ajax({

type: 'POST',

url: 'process.php',

data: {json: JSON.stringify(json_data)},

dataType: 'json'

})

.done( function( data ) {

console.log('done');

console.log(data);

})

.fail( function( data ) {

console.log('fail');

console.log(data);

});

您必须在PHP文件中返回JSON对象(以javascript格式),以便在Javascript代码中获得“完成/成功”结果。 最低退货/打印:

print('{}');

请参阅Ajax请求返回200 OK,但会引发错误事件而不是成功

尽管对于更严重的问题,您应该使用适当的响应代码显式发送回适当的标头。

Cyrille answered 2020-07-09T13:52:08Z

6 votes

使用AJAX的HTML输入字段(发送到服务器JSON,用PHP解析JSON并发送回客户端)的JavaScript上的简单示例:

Last Name

placeholder="Last name"/>

Age

placeholder="Age"/>

Show

var xmlhttp;

function actionSend() {

if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari

xmlhttp = new XMLHttpRequest();

}

else {// code for IE6, IE5

xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");

}

var values = $("input").map(function () {

return $(this).val();

}).get();

var myJsonString = JSON.stringify(values);

xmlhttp.onreadystatechange = respond;

xmlhttp.open("POST", "ajax-test.php", true);

xmlhttp.send(myJsonString);

}

function respond() {

if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {

document.getElementById('result').innerHTML = xmlhttp.responseText;

}

}

PHP文件ajax-test.php:

$str_json = file_get_contents('php://input'); //($_POST doesn't work here)

$response = json_decode($str_json, true); // decoding received JSON to array

$lName = $response[0];

$age = $response[1];

echo '

Received data:
First Name Age
'.$lName.'
'.$age.'

';

?>

Aconic answered 2020-07-09T13:52:33Z

4 votes

PHP具有称为json_decode()的内置函数。 只需将JSON字符串传递到此函数中,它将把它转换为等效的PHP字符串,数组或对象。

为了将其作为字符串从Javascript传递,您可以使用将其转换为JSON

JSON.stringify(object);

或诸如Prototype之类的库

John answered 2020-07-09T13:53:02Z

4 votes

有3种相关方式可以将数据从客户端(HTML,Javascript,Vbscript等)发送到服务器端(PHP,ASP,JSP等)

1. HTML form Posting Request (GET or POST).

2. AJAX (This also comes under GET and POST)

3. Cookie

HTML表单发布请求(GET或POST)

这是最常用的方法,我们可以通过此方法发送更多数据

AJAX

这是异步方法,必须以安全的方式工作,在这里我们还可以发送更多数据。

曲奇饼

这是使用少量不敏感数据的好方法。 这是处理少量数据的最佳方法。

您可以选择HTML表单发布或AJAX。 但是在发送到服务器之前,请先验证您的json或使用[http://jsonlint.com/]之类的链接

如果您有Json Object,则使用JSON.stringify(object)将其转换为String;如果您有JSON字符串,则按原样发送它。

Robin Michael Poothurai answered 2020-07-09T13:53:57Z

2 votes

使用JSON.stringify(yourObj)或Object.toJSON(yourObj),最后一个用于使用prototype.js,然后使用所需的任何内容(ajax或提交)将其发送,并根据建议使用json_decode([http:// www (.php.net / manual / en / function.json-decode.php])解析为php。 然后您可以将其用作数组。

khael answered 2020-07-09T13:54:17Z

2 votes

我建议使用jquery.post()方法。

ravi404 answered 2020-07-09T13:54:37Z

1 votes

var myJSONObject = {"bindings": 11};

alert(myJSONObject);

var stringJson =JSON.stringify(myJSONObject);

alert(stringJson);

jianfeng answered 2020-07-09T13:54:53Z

0 votes

您可以轻松地将对象转换为urlencoded字符串:

function objToUrlEncode(obj, keys) {

let str = "";

keys = keys || [];

for (let key in obj) {

keys.push(key);

if (typeof (obj[key]) === 'object') {

str += objToUrlEncode(obj[key], keys);

} else {

for (let i in keys) {

if (i == 0) str += keys[0];

else str += `[${keys[i]}]`

}

str += `=${obj[key]}&`;

keys.pop();

}

}

return str;

}

console.log(objToUrlEncode({ key: 'value', obj: { obj_key: 'obj_value' } }));

// key=value&obj[obj_key]=obj_value&

Юрий Столов answered 2020-07-09T13:55:13Z

-2 votes

我找到了简单的方法,但我知道这并不完美

1.将json分配给

如果您的JSON是

var data = [

{key:1,n: "Eve"}

,{key:2,n:"Mom"}

];

在--- main.php中

var data = [

{key:1,n: "Eve"}

,{key:2,n:"Mom"} ];

function setInput(data){

var input = document.getElementById('data');

input.value = JSON.stringify(data);

var submit =document.getElementById('submit');

//to submit and goto second page

submit.click();

}

//call function

setInput(data);

在------ second.php -----

printJson();

function printJson(){

var data = getUrlVars()["data"];

//decode uri to normal character

data = decodeURI(data);

//for special character , / ? : @ & = + $ #

data = decodeURIComponent(data);

//remove " ' " at first and last in string before parse string to JSON

data = data.slice(1,-1);

data = JSON.parse(data);

alert(JSON.stringify(data));

}

//read get variable form url

//credit http://papermashup.com/read-url-get-variables-withjavascript/

function getUrlVars() {

var vars = {};

var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {

vars[key] = value;

});

return vars;

}

OatMs answered 2020-07-09T13:55:51Z

 类似资料: