在javascript中创建JSON并通过ajax和php在webserver上创建一个文件

时间:2015-11-30 18:53:49

标签: javascript php json ajax

我已经搜索并阅读了有关该主题的所有信息,但根本无法使用。

我在javascript中创建一个数组,然后尝试使用ajax发送到php,以便在Web服务器上创建一个json文件。对不起,如果该术语已关闭,但这是我第一次尝试使用ajax和php。

数组看起来像这样,但有更多的元素,我认为[]可能会导致问题,但我不知道如何摆脱它们....

[{"elementId":"ID","elementValue":"VALUE","elementType":"text","legendActive":"false"}]

这是我的代码,我不确定路径是否正确,但我尝试了许多不同的变化而没有成功......

Javascript和ajax ......

function saveUserInputs(){
    var userSettings=[];
    inputs=$('form').find(':input:not(:submit), fieldset');
    inputs.each(function(){
        if (this.id.length>0){
            var elementId=$(this).prop('id');
            var elementValue=$(this).val();
            var elementType=$(this).prop('type');
            var elementChecked=$(this).prop('checked');
            var legendActive=$(this).hasClass('disabled-legend-element');
            userSettings.push({elementId: elementId, elementValue: elementValue, elementType: elementType, elementChecked: elementChecked, legendActive: legendActive});
        };
    });

    $.ajax({
        type : "POST",
        url: "http://www.lacomptabilite.ca/public_html/test.php",
        dataType : "json",
        data : { "json" : JSON.stringify(userSettings)}, 
        success: function (data) {alert(data); },
        error: function() {alert("Error!");}
    });         
};

PHP,位于服务器上的public_html文件夹中......

<?php
   $json = $_POST['json'];

   if (json_decode($json) != null) { /* sanity check */
     $file = fopen('new_map_data.json','w');
     fwrite($file, $json);
     fclose($file);
   } else {
     // handle error 
     echo 'empty';
   }
?>    

我甚至无法获得成功或失败的功能。任何人都知道我做错了什么?

编辑:按照建议将我的所有文件移动到Web服务器,但仍然收到403禁止错误。当我检查php文件的端口是80时,当我从JS检查时它是空白的,这可能是问题吗?

编辑#2:原来它与通信或权限问题无关。问题我发送的字符串元素之一是{"id":"panelProfile","value":null,"type":"select-one"},并且由于某种原因,ajax或php不喜欢在json文件中使用“select”一词。将其更改为“combobox”,一切正常。

2 个答案:

答案 0 :(得分:0)

你应该正确使用jQuery函数序列化,修复userSettings并替换为这段代码

var userSettings = $('form').serialize();

答案 1 :(得分:0)

FU ERROR 403!

根据我的编辑,这是我在更新的工作代码中找到的内容。错误403可能是由许多不明显的事情引起的,一个似乎是文件大小,另一个是我的问题是在我的json文件中使用“select”一词。我认为这可能与它是一个与SQL相关的保留字这一事实有关,但我并不是100%确定我所知道的它是不起作用的!

如果您要跨域发送文件,则需要将其添加到javascript ...

 $.support.cors=true;

...这是$ .ajax ...

crossDomain: true,

这是完整的代码,对我有用...我添加了2个不同的URL仅供参考,一个用于跨域路径,注释掉的是如果所有文件都在同一个域,端口和协议上。如果是这种情况,则不需要$.support.cors=true;crossDomain: true,

AJAX:

$.support.cors=true;   
$.ajax({
    crossDomain: true,
    method: "post",
    //url: "/php/userJson.php",
    url: "http://www.yourDomain.com/php/userJson.php",
    dataType: "json",

    data: {"json" : userSettings},
    success: function (suc) {alert (JSON.stringify(suc))},
    error: function(error) {alert (JSON.stringify(error))}
});  

这是php代码,我留下了一些注释掉的行,我觉得这些行很适合用于解决问题。

PHP:

<?php
    //echo $_SERVER["HTTP_HOST"];
    //echo $_SERVER["REQUEST_URI"]; 
    //echo $_SERVER["SERVER_NAME"]; 
    //echo $_SERVER["SERVER_PROTOCOL"]; 
    //echo $_SERVER["REQUEST_METHOD"]; 
    //echo $_SERVER["QUERY_STRING"]; 
    //echo $_SERVER["HTTP_REFERER"]; 

    $json=$_POST['json'];

    if (json_decode($json) != null){ 
        $file=fopen('user_data.json','w+');
        fwrite($file, $json);
        fclose($file);
    }else{
        echo "empty";
    }
?>

编辑:添加代码以从服务器中检索文件...

$.ajax({
  crossDomain: true,
  method: "GET",
  url: "http://www.yourDomain.com/php/user_data.json",
  dataType: "json",
  success: function (success) {alert (JSON.stringify(success))},
  error: function(error) {alert (JSON.stringify(error))}
});