Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.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 ajax向PHP提交错误的数据_Javascript_Php_Jquery_Ajax - Fatal编程技术网

Javascript ajax向PHP提交错误的数据

Javascript ajax向PHP提交错误的数据,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,这是一个html文件,通过点击按钮将ajax提交到PHP脚本(在IIS上) 但是PHP脚本收到了错误的格式化数据(添加了括号[],没有传输参数'section' 有什么不对劲 最好同时拥有两种解决方案:JQuery和纯javascript -------------------HTML <!DOCTYPE html> <html STYLE="height:100%;"> <head></head> <body> &

这是一个html文件,通过点击按钮将ajax提交到PHP脚本(在IIS上)

但是PHP脚本收到了错误的格式化数据(添加了括号[],没有传输参数'section'

有什么不对劲

最好同时拥有两种解决方案:JQuery和纯javascript

-------------------HTML

<!DOCTYPE html>
<html STYLE="height:100%;">
<head></head>
<body>
<SCRIPT>
function zPostToTopic_ajax(){
var url='http://the_server/infospace/php/infospace2.php';

var formData2 = new FormData();
formData2.append('section', 'general');
formData2.append('action2', 'preview');

http_request=new XMLHttpRequest();//work for IE11 too, // code for IE7+, Firefox, Chrome, Opera, Safari
http_request.open("POST", url);
//------------------------------------
http_request.onreadystatechange = function() {
if(http_request.readyState == 4 && http_request.status == 200)
  alert(http_request.responseText)
}
http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
http_request.send(formData2);
} 
</SCRIPT>


<FORM NAME=form_post_to_topic ID=form_post_to_topic METHOD=POST action="http://the_server/infospace/php/infospace2.php">
 &nbsp <INPUT TYPE=BUTTON VALUE=Send onClick="zPostToTopic_ajax();return false;">
</FORM>

</body>
</html>
使用jQuery的
.ajax()
函数。下面是一个我上传文件的例子

            var jform = new FormData();
            jform.append('supply_id',supply_id);
            jform.append('fuel_usage',$('#fuel_usage').val());
            jform.append('cost',$('#cost').val());
            jform.append('currency',$('#currency').val());
            jform.append('evidence',$('#evidence').get(0).files[0]);
            
            $.ajax({
                url: '/your-form-processing-page-url-here',
                type: 'POST',
                data: jform,
                dataType: 'json',
                contentType: false,
                cache: false,
                processData: false,
                success: function(data, status, jqXHR){
                    alert('Hooray! All is well.');
                    console.log(data);
                    console.log(status);
                    console.log(jqXHR);
                    
                },
                error: function(jqXHR,status,error){
                    // Hopefully we should never reach here
                    console.log(jqXHR);
                    console.log(status);
                    console.log(error);
                }
            });
使用jQuery的
.ajax()
函数。下面是一个我上传文件的例子

            var jform = new FormData();
            jform.append('supply_id',supply_id);
            jform.append('fuel_usage',$('#fuel_usage').val());
            jform.append('cost',$('#cost').val());
            jform.append('currency',$('#currency').val());
            jform.append('evidence',$('#evidence').get(0).files[0]);
            
            $.ajax({
                url: '/your-form-processing-page-url-here',
                type: 'POST',
                data: jform,
                dataType: 'json',
                contentType: false,
                cache: false,
                processData: false,
                success: function(data, status, jqXHR){
                    alert('Hooray! All is well.');
                    console.log(data);
                    console.log(status);
                    console.log(jqXHR);
                    
                },
                error: function(jqXHR,status,error){
                    // Hopefully we should never reach here
                    console.log(jqXHR);
                    console.log(status);
                    console.log(error);
                }
            });

您的问题是为请求设置了错误的内容类型。当您使用formdata对象时,内容类型将是多部分/formdata。
因此,在使用formdata对象时,不设置内容类型,而是为您设置

function zPostToTopic_ajax(){
    var url='http://the_server/infospace/php/infospace2.php';

    var formData2 = new FormData();
    formData2.append('section', 'general');
    formData2.append('action2', 'preview');

    http_request=new XMLHttpRequest();//work for IE11 too, // code for IE7+, Firefox, Chrome, Opera, Safari
    http_request.open("POST", url);
    //------------------------------------
    http_request.onreadystatechange = function() {
        if(http_request.readyState == 4 && http_request.status == 200)
            alert(http_request.responseText)
    }
    
    http_request.send(formData2);
} 

您的问题是为请求设置了错误的内容类型。当您使用formdata对象时,内容类型将是多部分/formdata。
因此,在使用formdata对象时,不设置内容类型,而是为您设置

function zPostToTopic_ajax(){
    var url='http://the_server/infospace/php/infospace2.php';

    var formData2 = new FormData();
    formData2.append('section', 'general');
    formData2.append('action2', 'preview');

    http_request=new XMLHttpRequest();//work for IE11 too, // code for IE7+, Firefox, Chrome, Opera, Safari
    http_request.open("POST", url);
    //------------------------------------
    http_request.onreadystatechange = function() {
        if(http_request.readyState == 4 && http_request.status == 200)
            alert(http_request.responseText)
    }
    
    http_request.send(formData2);
} 

不使用jQuery的AJAX有什么原因吗?
jQuery和纯javascript
?只需使用jQuery就可以了,这会简单得多。或者只需使用纯JS,但为什么两者都需要呢?接收的数据似乎与发送的数据一致,这里没有问题。请查看
打印($\u POST)的输出
它将在javascript调试器
http\u request.responseText
中可见,或者您可以执行
file\u put\u contents('dump.txt',print\r($\u POST',1));
然后查看该文件有没有不使用jQuery的AJAX的原因?
jQuery和纯javascript
?只需使用jQuery就可以了。或者只需使用纯JS,但为什么需要两者?接收的数据似乎与发送的数据一致,这里没有问题。尝试查看
打印的输出_r($\u POST);
它将在javascript调试器http\u request.responseText中可见,或者您可以执行
文件放置内容('dump.txt',print\u r($\u POST',1));
然后查看该文件谢谢-解决了这个问题!谢谢-解决了这个问题!