代码之家  ›  专栏  ›  技术社区  ›  Laurent

用javascript将dom对象发送到php服务器

  •  0
  • Laurent  · 技术社区  · 6 年前

    我正在开发一个chrome扩展,它将一个页面的源代码发送到一个服务器,在该服务器上解析它。

    捕获源代码工作正常,如果我在控制台中显示它,它看起来像这样:

    然后为了将其推送到我的PHP服务器上,我首先隔离主体的内容(您在前一张图片中看到的内容存储在“result”中):。

    html_content=result.queryselectorall('body')[0].outerhtml;
    html_content=json.stringify(html_content);
    < /代码> 
    
    

    如果我在控制台中显示HTML_内容,我会得到如下信息:

    现在我有了一个JSON对象,我尝试通过以下方式发送它:

    var xhr=new xmlhttprequest();
    xhr.open(“post”,“myapi-url”);
    xhr.setrequestheader(“内容类型”,“应用程序/json”);
    xhr.send(html_内容);
    < /代码> 
    
    

    对URL的调用有效,但我在$\u Post中没有得到任何信息。它是空的

    如果我试图分配这样一个特定的变量:

    xhr.send('content='+html_content);
    < /代码> 
    
    

    它也不起作用。在PHP方面,我只是这样做:

    print_r($_post);
    < /代码> 
    
    

    这将返回一个空数组。

    >更新======>

    根据下面的反馈,我对一些事情进行了调整,结果变得更好。正如建议的那样,我使用的是text/plain,并且保持DOM对象的完整性(我不只取主体)。

    var xhr=new xmlhttprequest();
    xhr.open(“post”,“myapi url”);
    xhr.setrequestheader(“内容类型”,“文本/普通”);
    xhr.send(内容);
    < /代码> 
    
    

    如果我在服务器端使用这个:

    $html_content=file_get_contents('php://input');
    < /代码> 
    
    

    这个变量如预期的那样包含文本字符串,所以这很好,但是现在如果我尝试解析接收到的HTML,它就会出错。

    $html_content=file_get_contents('php://input');
    $dom=新建domdocument;
    $dom->加载HTML($html_content);
    < /代码> 
    
    

    当我这样做的时候,我会收到如下警告:

    <b>警告</b>:domDocument::loadHTML():id ghostery实体中尚未定义跟踪程序,第<b>我的URL中的第506行</b>联机<b>25</b><br/>
    < /代码> 
    
    

    好像它不能正确理解HTML。

    有什么想法吗?

    enter image description here

    然后,为了将其推送到我的PHP服务器,我首先隔离主体的内容(您在上一张图片中看到的内容存储在“result”中):

    html_content = result.querySelectorAll('body')[0].outerHTML;
    html_content =JSON.stringify (html_content);
    

    如果我在控制台中显示HTML_内容,我会得到如下信息:

    enter image description here

    现在我有了一个JSON对象,我尝试通过以下方式发送它:

    var xhr = new XMLHttpRequest(); 
    xhr.open("POST", "myAPI_URL");
    xhr.setRequestHeader("Content-Type", "application/json");
    xhr.send(html_content);
    

    对URL的调用有效,但我在$\u Post中没有得到任何信息。它是空的

    如果我试图分配这样的特定变量:

    xhr.send('content='+html_content);
    

    它也不起作用。在PHP方面,我只是这样做:

    print_r($_POST);
    

    这将返回一个空数组。

    ==更新===

    根据下面的反馈,我对一些事情进行了调整,结果变得更好。正如建议的那样,我使用的是text/plain,并且保持DOM对象的完整性(我不只取主体)

                var xhr = new XMLHttpRequest(); 
                xhr.open("POST", "myAPI URL");
                xhr.setRequestHeader("Content-Type", "text/plain");
                xhr.send(content);
    

    如果我在服务器端使用它:

    $html_content = file_get_contents('php://input');
    

    这个变量如预期的那样包含文本字符串,所以这很好,但是现在如果我试图解析接收到的HTML,它就会出错。

    $html_content = file_get_contents('php://input');
    $dom = new DOMDocument;
    $dom->loadHTML($html_content);
    

    当我这样做的时候,我会收到如下警告:

    <b>Warning</b>:  DOMDocument::loadHTML(): ID ghostery-no-tracker already defined in Entity, line: 506 in <b> my url </b> on line <b>25</b><br />
    

    好像它不能正确理解HTML。

    有什么想法吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Daniel W.    6 年前

    php://input $_POST

    Content-Type

    STDIN

    http://php.net/manual/en/wrappers.php.php

    $HTTP_RAW_POST_DATA

    DOMDocument