Hit*_*anA 1 php ajax syntax json
我正在使用 ajax 用 JSON 发送数据,它一直返回 null。这是我发送的字符串:
{"username":"HittmanA","code":"%601234567890-%3D~!%40%23%24%25%5E%26*()_%2Bqwertyuiop%5B%5D%5CQWERTYUIOP%7B%7D%7Casdfghjkl%3B'ASDFGHJKL%22zxcvbnm%2C%2FZXCVBNM%3C%3E%3F","name":"Untitled-1"}
Run Code Online (Sandbox Code Playgroud)
它是通过邮寄方式发送的。这是我发送的代码:
function slash(strr){
var re = /([^a-zA-Z0-9])/g;
var str = strr;
var subst = '\$1';
var st = encodeURIComponent(str.replace(re,subst));
console.log("st");
return st;
}
function create() {
var info = {};
var code=editor.getValue();
info.username=username;
info.code=slash(code);
var name=document.getElementById('projectName').value;
name2=name;
info.name=slash(name2);
info=JSON.stringify(info);
console.log(info);
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (xhttp.readyState == 4 && xhttp.status == 200) {
document.getElementById("demo").innerHTML = xhttp.responseText;
}
};
xhttp.open("POST", "create_project.php", true);
xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhttp.send("info="+info);
}
Run Code Online (Sandbox Code Playgroud)
当它在 php 文件中收到时,它的处理方式如下:
$info = $_POST['info'];
echo "<pre>".$info."</pre>";
//$info = urldecode($info);
$info = json_decode($info);
echo "<pre>".$info."</pre>";
Run Code Online (Sandbox Code Playgroud)
但是由于某种原因 json_decode() 不起作用。这里再次是我发送的 JSON:
{"username":"HittmanA","code":"%601234567890-%3D~!%40%23%24%25%5E%26*()_%2Bqwertyuiop%5B%5D%5CQWERTYUIOP%7B%7D%7Casdfghjkl%3B'ASDFGHJKL%22zxcvbnm%2C%2FZXCVBNM%3C%3E%3F","name":"Untitled-1"}
Run Code Online (Sandbox Code Playgroud)
第一个回声正常工作,但第二个没有。我该如何解决?
json_decode()必须发出您没有检查的错误。像json_decode()和json_encode()不显示错误的函数,您必须使用,json_last_error并且从 PHP 5.5 开始,还有json_last_error_msg().
<?php
$str = '{"username":"HittmanA","code":"%601234567890-%3D~!%40%23%24%25%5E%26*()_%2Bqwertyuiop%5B%5D%5CQWERTYUIOP%7B%7D%7Casdfghjkl%3B\'ASDFGHJKL%22zxcvbnm%2C%2FZXCVBNM%3C%3E%3F","name":"Untitled-1"}';
var_dump($str);
var_dump(json_decode($str));
var_dump(json_last_error());
var_dump(json_last_error_msg());
Run Code Online (Sandbox Code Playgroud)
以上输出:
string(189) "{"username":"HittmanA","code":"%601234567890-%3D~!%40%23%24%25%5E%26*()_%2Bqwertyuiop%5B%5D%5CQWERTYUIOP%7B%7D%7Casdfghjkl%3B\'ASDFGHJKL%22zxcvbnm%2C%2FZXCVBNM%3C%3E%3F","name":"Untitled-1"}"
class stdClass#1 (3) {
public $username =>
string(8) "HittmanA"
public $code =>
string(136) "%601234567890-%3D~!%40%23%24%25%5E%26*()_%2Bqwertyuiop%5B%5D%5CQWERTYUIOP%7B%7D%7Casdfghjkl%3B\'ASDFGHJKL%22zxcvbnm%2C%2FZXCVBNM%3C%3E%3F"
public $name =>
string(10) "Untitled-1"
}
int(0)
string(8) "No error"
Run Code Online (Sandbox Code Playgroud)
如果我们尝试解码无效的 JSON:
<?php
$str = 'foobar{';
var_dump($str);
var_dump(json_decode($str));
var_dump(json_last_error());
var_dump(json_last_error_msg());
Run Code Online (Sandbox Code Playgroud)
上面的打印:
string(7) "foobar{"
NULL
int(4)
string(16) "boolean expected"
Run Code Online (Sandbox Code Playgroud)
当您尝试解码时,JSON 中肯定有错误。使用json_*错误消息功能检查错误。错误消息会告诉您出了什么问题,一旦您知道错误是什么,它就会直接修复。
| 归档时间: |
|
| 查看次数: |
6842 次 |
| 最近记录: |