Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当我使用文件内容时,文件被清空_Javascript_Php_Arrays_Json_Ajax - Fatal编程技术网

Javascript 当我使用文件内容时,文件被清空

Javascript 当我使用文件内容时,文件被清空,javascript,php,arrays,json,ajax,Javascript,Php,Arrays,Json,Ajax,主要问题在评论中得到了解决,尽管其中一个奖金问题仍然悬而未决,另一个的解决方案可能需要一些改进 所有这些都发生在webhosting服务上,文件夹结构如下所示: JavaScript和PHP文件位于/public\u html/中,JSON位于/public\u html/data/中 在我的JS代码中,我发送了一个POST请求,其中包含JSON文件的一些数据: console.log(objdata.buildings[0].coords); var params = JSON.stringi

主要问题在评论中得到了解决,尽管其中一个奖金问题仍然悬而未决,另一个的解决方案可能需要一些改进

所有这些都发生在webhosting服务上,文件夹结构如下所示:

JavaScript和PHP文件位于/public\u html/中,JSON位于/public\u html/data/中

在我的JS代码中,我发送了一个POST请求,其中包含JSON文件的一些数据:

console.log(objdata.buildings[0].coords);
var params = JSON.stringify(objdata);
if (objdata.buildings[0].coords != " "){
    $.ajax({
        type: "POST",
        data: params,
        url: "writecoords.php",
        success: function(data){
                console.log(params);
                console.log(data);
                console.log("AJAX success");
        },
        error: function(){
                console.log("failed to send POST");
                alert("error");
        }
    });
}
PHP文件:


如您所见,我在每个可能的点执行检查,以查看我是否实际处理非空数据——我记录有问题的键的值,AJAX请求仅在更改时发送,我记录发送的数据,我记录PHP文件接收和解码的数据

我还检查文件是否可写,以避免可能的权限问题,然后才尝试写入该文件。该文件为空,我在控制台中得到以下输出

  • params是我的JSON对象,作为一行
  • 数据是:我的JSON对象是一行,在每个新对象和所有转换为\u格式的西里尔文之前都有换行符,“未写入任何内容!”,“PHP写入成功”
  • “AJAX成功”
如果我在这之后检查strogi.json文件,它绝对是空的

为了排除传递的JSON对象的格式问题,我尝试在与.php相同的目录中写入一个简单的test.txt文件,结果也是空的

我尝试使用描述的方法,但没有改变

我尝试使用FTP上传(该方法在注释中的某个地方指出),我得到了strogi.json和test.txt文件返回的“没有这样的文件或目录”。我使用了
public\uhtml/test.txt
test.txt
作为文件名

我尝试使用locks FILE|u APPEND | LOCK_EX的组合,但两个文件都没有发生任何更改

我的问题是:

  • 为什么?
  • 如果所有这些都发生在对同一文件调用的$.getJSON()的.done()回调中,是否可以使用其他解决方案

  • 后续问题应单独列为一节:

    coords是一个三维数组

    [
    [[x1,y1],[x2,y2],...]]
    ]
    
    其中外部阵列最多包含两个阵列。第一个阵列包含外部多边形的点,第二个阵列(如果存在)包含用作剪切的内部多边形的点

    所讨论的代码试图使提交到strogi.json的coords数组至少对一个对象有效

    总的来说,我想做的是

    • $.getJSON()保存数据/strogi.json文件
    • 在.done()中遍历建筑物[]中的对象数组 回拨
    • 对于每个对象,检查“coords”是否为“”(默认值)
    如果是,则调用构造函数使用MapAPI构建多边形,构建完成后,使用$.ajax提交通过API函数之一提取的坐标

    到目前为止,我正在提交整个JSON对象,因为我只处理其中一个内部对象,但我认为在呈现多个对象的情况下重新提交整个对象是过度的

  • 是否有方法将索引为i的objdata.buildings[i].coords传递给PHP,以更改特定buildings[i]对象JSON中的“coords”键值
  • 我是否需要对处理数据的方式进行任何更改,以便在进一步读取时使JSON有效?我假设我必须将“coords”值从
    [[[[x1,y1],[x2,y2]]
    (现在的传递方式)更改为类似的内容(pastebin,因为即使使用4个空格缩进,也没有代码格式) 让它工作,对吗?我该怎么做?通过使用两个
    for()
    循环遍历JS中的数组,并将
    toString()
    应用于每个坐标,一定有更好的方法解决了部分问题

  • 您正试图
    将内容放入解码对象(可能是stdClass)上
    file\u put\u contents
    需要一个字符串、数组或流作为第二个参数。@ccKep将改为“$newJSON.”工作吗?或者有没有一种方法可以在$newJSON上使用impolde()来向文件中写入有意义的JSON对象?如果不是,我应该使用fOpen、fWrite和fClose吗?@ccKep四处搜索了一下,编写对象的方法似乎是通过
    serialize()
    来编写
    fWrite()
    file\u put\u contents()
    ,这将对象转换成,而不是JSON。这是无法逃避的吗?从技术上讲,我可以切换到通过另一个PHP文件获取JSON数据,这将
    反序列化()
    存储的混乱并将其传递,但我非常希望以可读的格式保存它,以便以后直接编辑。如果您的JavaScript发布JSON字符串,只需将该字符串写入文件即可。如果您只想编写一些JSON
    文件内容('data/strogi.JSON',$newJSON),则无需对其进行解码$newJSON
    是一个JSON字符串,那么code>应该可以正常工作-无需序列化任何内容。