我已经搜索并阅读了有关该主题的所有信息,但根本无法使用。
我在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”,一切正常。
答案 0 :(得分:0)
你应该正确使用jQuery函数序列化,修复userSettings并替换为这段代码
var userSettings = $('form').serialize();
答案 1 :(得分:0)
根据我的编辑,这是我在更新的工作代码中找到的内容。错误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))}
});