由于file_get_contents,AJAX请求失败

时间:2017-08-21 23:48:47

标签: php jquery ajax file-get-contents

我自己做了一个有趣的项目,包括从另一个网站(来自不同的域)获取HTML源代码并获取它的一些信息。

在我的第一步中,我只使用PHP完成了所有工作,但是现在我尝试使用jQuery使其更好,因此页面可以动态地工作。

问题是,当我的Ajax请求到达" file_get_contents" call(这是给我网址的html源代码的那个)。

JS部分:

$.ajax({
            type: 'GET',
            url: 'getImage.php',
            data: {referencia: $("#referencia").val()},
            success: function(data){
                var div = document.getElementById("print");
                alert(data);
                div.innerHTML = "<img src="+""+"/>"; //Not finished

            },
            error: function() {
                alert("Error");
            }
});

服务器部分:

<?php
    $ref = $_POST['referencia'];

    if(isset($_GET['referencia'])){
        $url = /*some external url concatened with the post data*/;

        $data = file_get_contents($url);

        echo $data;
    }
?>

我可以提供的一些注意事项:      - 将ajax的类型改为post会使其失败,即使你删除&#34; file_get_contents&#34;线。      - 我也尝试过这种请求而没有运气(这个问题在到达&#34; file_get_contents&#34;行时没有失败,但在执行该功能时,它并没有返回任何内容,但我有独立测试它没有请求,工作正常):

    var req = new XMLHttpRequest(); 
    req.open("POST", "getImage.php", true);

    req.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
    req.onreadystatechange = function(){
        if(req.readyState == 4 && req.status == 200){
            var div = document.getElementById("print");
            alert(req.responseText);
            div.innerHTML = "<img src="+""+"/>";
        }
    }

    req.send("referencia=" + encodeURIComponent($("#referencia").val()));

1 个答案:

答案 0 :(得分:0)

我的解决方案为我工作了100% ajax-> server.php->创建temp.zip->返回头文件->删除temp.zip->下载文件

server.php

import Foundation
import Firebase
import FirebaseDatabase

class Rewards {
    let ref: DatabaseReference!
  //  let countRef: DatabaseReference!
    var rewardAmt: Int!
    var rewardsLeft: Int!
    var reward_class_name: String = ""
    var reward_amt: String = ""
    var reward_desc: String = ""
    var rewardID: String = ""
    var tickUpCount = 0
    var tickDownCount = 0

    init(text: String) {
        ref = Database.database().reference().child("Fund").childByAutoId()
      //  countRef = Database.database().reference().child("Testing").childByAutoId()
    }



   init(snapshot: DataSnapshot)
    {
        ref = snapshot.ref
        if let value = snapshot.value as? [String : Any] {
            rewardAmt = value["reward_ticket_amount"] as! Int
            reward_class_name = value["reward_ticket_amount_class_name"] as! String
            reward_amt = value["reward_ticket_amount_txt"] as! String
            reward_desc = value["reward_ticket_class_desc"] as! String
            rewardsLeft = value["rewards_left"] as! Int
            rewardID = snapshot.key

        }
    }

    }

extension Rewards{

    func countUp(){
        tickUpCount += 1
        ref.child("uppingTicket").setValue(tickUpCount)

    }

}

XMLHttpRequest而不是AJAX调用

    //...
    //ToDo Endforeach
    $zip->close();

    /* SOLUTION 1 without saving */

    header('Content-type: application/zip');
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Content-Description: File Transfer");
    header("Access-Control-Allow-Origin: *");
    header('Content-Disposition: attachment; filename="'.basename($zip_file).'"');
    header("Content-Transfer-Encoding: binary");
    header("Content-length: " . filesize($zip_file));
    header("Pragma: public"); // required
    header("Expires: 0");


    ob_end_flush();
    readfile($zip_file);//important this line
    unlink($zip_file);

    die();
    #...

如果一切正常,您将可以通过浏览器下载文件,而无需将其保存在服务器端。设计用于WordPress。