Php 在chrome中更新的JSON文件在firefox中不起作用

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 )

嗨,我正在尝试在我现有的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 );
});
这可以在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);