Javascript AJAX启动错误作为警报,但在数组中作为php json的字符串响应良好

Javascript AJAX启动错误作为警报,但在数组中作为php json的字符串响应良好,javascript,php,jquery,json,ajax,Javascript,Php,Jquery,Json,Ajax,我尝试使用AJAX通过FormData从JavaScript向PHP发送一些文本数据和文件。我还尝试将数组作为响应从PHP发送到JavaScript,因此我在PHP中使用json\u encode(),在JavaScript中使用json.parse()。代码似乎可以工作,但AJAX在error alert中向我显示了PHP的响应,尽管响应很好。这是我的密码: JS: 阿贾克斯: PHP: 填充数组的另一个示例: $errors['tel']=""; if (empty($telefon))

我尝试使用AJAX通过
FormData
从JavaScript向PHP发送一些文本数据和文件。我还尝试将数组作为响应从PHP发送到JavaScript,因此我在PHP中使用
json\u encode()
,在JavaScript中使用
json.parse()
。代码似乎可以工作,但AJAX在error alert中向我显示了PHP的响应,尽管响应很好。这是我的密码: JS:

阿贾克斯:

PHP:

填充数组的另一个示例:

$errors['tel']="";
if (empty($telefon))
    {$errors['tel'] = $f14[$j];}
else if ((strlen($telefon) > 20) && (!empty($telefon)))
    {$errors['tel'] = $f05[$j];}
else if ((!preg_match('/^[0-9-\s\(\)\/]{1,20}+$/', $telefon)) && (!empty($telefon)) && (strlen($telefon) < 21))
    {$errors['tel'] = $f15[$j];}
以下是alert向我展示的内容:

{"rodzaj":"Prosimy wybra\u0107 typ naprawy.","marka":"Prosimy wybra\u0107 mark\u0119.","kategoria":"Prosimy wybra\u0107 kategori\u0119 sprz\u0119tu.","model":"Prosimy wprowadzi\u0107 model.","numer":"Prosimy wprowadzi\u0107 numer fabryczny.","data":"","imie":"Prosimy wprowadzi\u0107 imi\u0119.","adres":"Prosimy wprowadzi\u0107 adres.","tel":"Prosimy wprowadzi\u0107 numer telefonu.","email":"Prosimy wprowadzi\u0107 adres email.","opis":"","zal1":"","zal2":"","zal3":""} 
我们可以看到字段和值的名称,例如:name->rodzaj;值->Prosimy wybra\u0107类型naprawy。所以回答是可以的。但问题可能在于ajax中的解析。顺便说一句,我想在div中将这个值设置为text,但是当我尝试不使用json而是使用datetype text/html时,我得到了div的文本,比如undefined。当我在浏览器的控制台中注释数据类型i时,我得到:

“SyntaxError:缺少;在语句之前”


有人看到有缺陷吗?

当您在jQuery Ajax选项中设置了
数据类型:“json”
时,jQuery将为您解析响应。它为您运行JSON.parse()

因此,当您执行
returnedData=JSON.parse(数据)时您正在尝试解析和对象,而不是字符串

无需解析数据,因为jQuery已经将数据从字符串转换为对象

当您将数据类型更改为其他类型时,它工作的原因是,其他数据类型返回的是字符串,而不是对象,因此可以解析该字符串

现在看看为什么会触发Ajax处理程序,这通常是由响应之前或之后输出的其他字符引起的。检查的一种方法是转义输出

console.log(escape(msg.responseText));
您将看到
{
之前或
}
之后的转义序列


因此,您需要查看PHP代码,并了解如何将这些字符写入响应中

当我在chrome中测试时,似乎没问题:
var x='{“rodzaj”:“Prosimy wybra\u0107 typ naprawy.”,“marka”:“Prosimy wybra\u0107 mark\u0119.”,“kategoria”:“Prosimy wybra\u0107 kategori\u0119 sprz\u0119tu.”,“model”:“Prosimy Wbrowadzi\u0107 model.”,“numer”:“Prosimy wprowadzi\u0107 numer fabryczny.”,“data”:“imie”:”:“Prosimy wprowadzi\u0107 imi\u0119.”,“adres”:“Prosimy wprowadzi\u0107 adres.”,“电话”:“Prosimy wprowadzi\u0107 numer telefonu.”,“电子邮件”:“Prosimy wprowadzi\u0107 adres电子邮件.”,“opis”:“zal1”:“zal2”:“zal3”:“}”;JSON.parse(x);
不错,但在字符串中显示错误。
console.log(escape(data))是什么
return?当我尝试错误解析时,我得到:
JSON.parse:JSON数据第1行第2列出现意外字符
,因为您试图解析的是一个对象,而不是字符串。当您说html时,它是一个字符串,可以解析。
JSON.parse({“foo”:“bar”})
vs
JSON.parse({“foo”:“bar”})
。当数据类型设置为JSON时,jQuery会为您执行JSON.parse()代码。
$errors['tel']="";
if (empty($telefon))
    {$errors['tel'] = $f14[$j];}
else if ((strlen($telefon) > 20) && (!empty($telefon)))
    {$errors['tel'] = $f05[$j];}
else if ((!preg_match('/^[0-9-\s\(\)\/]{1,20}+$/', $telefon)) && (!empty($telefon)) && (strlen($telefon) < 21))
    {$errors['tel'] = $f15[$j];}
echo json_encode($errors);
{"rodzaj":"Prosimy wybra\u0107 typ naprawy.","marka":"Prosimy wybra\u0107 mark\u0119.","kategoria":"Prosimy wybra\u0107 kategori\u0119 sprz\u0119tu.","model":"Prosimy wprowadzi\u0107 model.","numer":"Prosimy wprowadzi\u0107 numer fabryczny.","data":"","imie":"Prosimy wprowadzi\u0107 imi\u0119.","adres":"Prosimy wprowadzi\u0107 adres.","tel":"Prosimy wprowadzi\u0107 numer telefonu.","email":"Prosimy wprowadzi\u0107 adres email.","opis":"","zal1":"","zal2":"","zal3":""} 
console.log(escape(msg.responseText));