Javascript post方法对PHP的XHR请求失败

时间:2015-06-05 21:00:43

标签: javascript php ajax post xmlhttprequest

我正在尝试使用Chrome中的JavaScript XHR(最新版)对PHP页面进行简单的发布。我收到错误 - 具体来说,我调用的test.php页面(与我的JS代码在同一文件夹中,本地)显示为失败的http响应。 Chrome开发者工具显示为“无法加载响应数据'。

test.php的

<?php
echo 'this string should return';
?>

ajax.js

createXHR: function () {
        if (typeof XMLHttpRequest !== 'undefined') {
            return new XMLHttpRequest();
        } else if (typeof ActiveXObject !== 'undefined') {
            if (typeof arguments.callee.activeXString !== 'string') {
                var versions = ['MSXML2.XMLHttp.6.0', 'MSXML2.XMLHttp.3.0',
                    'MSXML2.XMLHttp'],
                        i,
                        len;
                for (i = 0, len = versions.length; i < len; i++) {
                    try {
                        new ActiveXObject(versions[i]);
                        arguments.callee.activeXString = versions[i];
                        break;
                    } catch (ex) {
                        //skip
                    }
                }
            }
            return new ActiveXObject(arguments.callee.activeXString);
        } else {
            throw new Error('No XHR object available.');
        }
    },

var xhr = AJAX.createXHR();

        /**
         *  @event onreadystatechange
         *  @description DOM Level 0 event fired when readyState property is changed
         */
        xhr.onreadystatechange = function () {
            /** @param {Number} readyState 0 - Uninitialized, 1- Open, 2- Sent, 3- Receiving, 4- Complete */
            if (xhr.readyState === 4) {

                console.log(xhr.status); //prints 0

                if ((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304) {
                    AJAX.success(xhr.responseText);
                } else {
                    //fail
                    AJAX.fail();
                }
            }
        };

        xhr.open('post', 'test.php', true);

        xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');

        xhr.send('name=myname&email=myemail');

我可以获取此页面,因此我绝对可以看到相同来源的页面,但POST似乎无法正常工作。我已设置Content-Type,将async设置为true,将方法设置为post,文件名正确。我尝试在我的php文件中使用return,以及print_r和echo - 没有骰子。

为什么答案根本没有通过?它刚刚通过readyState = 4 = Complete,但xhr.status为0(零)。想法?

编辑:

我正在使用localhost,使用netbeans运行。

http://localhost:8383/Coding%20Practice/public_html/index.html

test.php位于http://localhost:8383/Coding%20Practice/public_html/test.php

1 个答案:

答案 0 :(得分:0)

从netbeans运行本地文件不是服务器。我认为它的作用就像一台服务器,但事实并非如此。通过wamp运行此代码工作正常。