Php 在chrome中更新的JSON文件在firefox中不起作用
嗨,我正在尝试在我现有的JSON文件中编辑和保存一些数据,下面是代码-Php 在chrome中更新的JSON文件在firefox中不起作用,php,json,jquery,firefox,Php,Json,Jquery,Firefox,嗨,我正在尝试在我现有的JSON文件中编辑和保存一些数据,下面是代码- var newData = { mailTo: 'abc@123.com'}; $.ajax({ type: 'POST', url: 'jsonHandler.php', data: newData, }).done(function( formData ) { formData = eval('(' + formData + ')'); $('#mail').val( formData.load[0].mailTo )
var newData = { mailTo: 'abc@123.com'};
$.ajax({
type: 'POST',
url: 'jsonHandler.php',
data: newData,
}).done(function( formData ) {
formData = eval('(' + formData + ')');
$('#mail').val( formData.load[0].mailTo );
});
这可以在chrome和IE中使用,但当我使用firefox运行JSON时,它不会得到更新
以下是在Firefox中生成的请求头(使用firebug获得)
jsonHandler.php代码
<?php
require_once('JSON.php');
$json = new Services_JSON();
$json_data = json_decode(file_get_contents('formData.json'), true);
if (isset( $_POST['formId'])) {
$json_data['load'][0]['formId'] = $_POST['formId'];
} else {
echo 'No text found';
}
if (isset( $_POST['mailTo'])) {
$json_data['load'][0]['mailTo'] = $_POST['mailTo'];
} else {
echo 'No text found';
}
$output = ($json->encode($json_data));
file_put_contents('formData.json', $output);
print ($output);
?>
显示一个表示错误的警告框 试试这个,它会让你更好地记录错误
var newData = { mailTo: 'abc@123.com'};
$.ajax({
type: 'POST',
url: 'jsonHandler.php',
data: newData,
success: function( formData ) {
formData = eval('(' + formData + ')');
$('#mail').val( formData.load[0].mailTo );
},
error:function(jqXHR,textStatus,errorThrown ){
alert(textStatus + " " +errorThrown );
}
});
或者在您的case override.fail()上获取额外数据您的PHP脚本需要
formId
和mailTo
参数,但您只发送mailTo
。当它看不到formId
时,它会回显未找到的文本
。这使得结果无效。您可以在错误消息中看到:返回的字符串以:
No text found{"load":[{"formId":"form2","mailTo":"def@123.com"}]
所以你要做的是:
eval('(No text found{"load":[{"formId":"form2","mailTo":"def@123.com"}]...)');
但是该字符串不是有效的Javascript,因此eval会得到一个错误
您要么更改PHP,使其以不同的方式报告错误,要么更改Javascript,使其在解码之前从返回的字符串中删除错误
您也不应该使用eval()
来解析JSON。使用:
formData = $.parseJSON(formData);
删除“未找到文本”前缀后
我也有点怀疑
$json->encode($json\u data)
。为什么要用它来代替内置的json\u编码($json\u data)
?不要使用eval()
来解码json。在$.ajax()
选项中指定dataType:'json'
,jQuery将在设置formData
时自动解析它。或者使用$.parseJSON()
。感谢您的回复。。我在firebug控制台中遇到的错误被添加到问题中,请看,您不能使用echo“No text found”,最后您正在等待json响应,但出现的文本将使json格式错误,因此如果您只需要一件事,请在json中添加一个错误变量,以携带错误消息,而不是像这样打印$json_data['error']=“item not found”我已经从php脚本中删除了else部分,但在firefox中仍然不起作用,在chrome中仍然不起作用。添加formData=$.parseJSON(formData);但在firefox中仍然不起作用json未被编辑。在$.ajax之后,我使用location.reload(),如果我删除location.reload(),json将被更新,但使用location.reload()没有。location.reload()重新加载原始页面,您动态添加的任何内容都将丢失。我在$.ajax的成功部分添加了location.reload(),现在它工作正常。我将测试它,如果遇到任何问题,请告诉您,谢谢!!!
eval('(No text found{"load":[{"formId":"form2","mailTo":"def@123.com"}]...)');
formData = $.parseJSON(formData);