获取json ajax php表单以远程工作 [英] Get json ajax php form to work remotely

查看:70
本文介绍了获取json ajax php表单以远程工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

因此,从本质上讲,我有这个Javascript可以从我的php代码中解释JSON.它在本地服务器上效果很好,但是,当我尝试将脚本移动到其他服务器上时,它将无法正常工作.我已经添加了

So, essentially I have this Javascript which interprets the JSON from my php code. It works great on the local server, however, when I try to move the script to a different server it will not work. I have added the

<?php header("Access-Control-Allow-Origin: *"); ?>

我也在PHP函数中声明了数据库连接为全局连接.

also i've declared my database connection as global within my PHP function.

我对为什么这些解决方案无法正常工作感到困惑.此外,我了解某些脚本还很不稳定,但是我只想弄清楚为什么它不能在不同的服务器上正常工作.

I'm confused as to why these solutions aren't working.. Also, I understand some of the script is iffy, but I'm only interested in figuring out why its not working from different servers.

<script type="text/javascript">
$("document").ready(function(){
  $(".sendText").submit(function(){
    $("#sendButton").prop("disabled",true);
    $(".errors").html("");
    $(".success").html("");
    var data = {
      "action": "test"
    };
    data = $(this).serialize() + "&" + $.param(data);
    $.ajax({
      type: "POST",
      dataType: "jsonp",  //new edit
      url: "http://myurl.com/testing/jsonpost.php?callback=test",  //new edit
      data: data,
      success: function(data) {
        if(data["success"]=="yes") {
        $(".success").html("Message Sent!");
        $(".formContainer").html("" + data["json"] + "");
        }
        else {
        if(document.getElementById("sendButton").disabled = true){ document.getElementById("sendButton").disabled = false; }
        $(".errors").html("" + data["errors"] + "");
        }
      }
    });
    return false;
  });
});
</script>

当我从萤火虫看Web控制台时的一些信息:

Some Info when I look at the web console from firebug:

Access-Control-Allow-Orig...    *
Connection  Keep-Alive
Content-Length  0
Content-Type    application/json
Date    Wed, 24 Sep 2014 04:22:57 GMT
Keep-Alive  timeout=5, max=100
Server  Apache/2.2.27 (Unix) mod_ssl/2.2.27 OpenSSL/1.0.1e-fips DAV/2 mod_bwlimited/1.4
X-Powered-By    PHP/5.4.29

看起来它正在与服务器通信但无法解释数据?有想法吗?

Looks like it is communicating with server but not able to interpret data? thoughts?

此外,远程服务器上的控制台中也会出现此错误,但是当我在本地服务器上运行时却不会:

Also, this error comes up in the console from the remote server but not when I run on local server:

SyntaxError {stack: (...), message: "Unexpected end of input"}message: "Unexpected end of input"stack: (...)
Object {readyState: 4, getResponseHeader: function, getAllResponseHeaders: function, setRequestHeader: function, overrideMimeType: function…
parsererror 

PHP代码相当长(我不愿发布所有代码)-但是这是缩短的版本:

The PHP code is pretty long (and I prefer not to release all of it) - however here is the shortened version:

<?php
header("Access-Control-Allow-Origin: *");
header('Content-Type: application/json');
require "../database/db.php";

if (is_ajax()) {
  if (isset($_POST["action"]) && !empty($_POST["action"])) { //Checks if action value exists
    $action = $_POST["action"];
    switch($action) { //Switch case for value of action
      case "test": test_function(); break;
    }
  }
}

//Function to check if the request is an AJAX request
function is_ajax() {
  return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest';
}

function test_function(){
$c="1";
global $con;

  $return = $_POST; //to reference post

$content=$return["content"];

//see if content is 140 characters or less
if(strlen($content)>140){ $c="0"; $lerror="<li>Your message must be 140 characters or less in length!</li>"; }



if($c=="0"){  //doesnt pass validation
$return["success"]="no";
$return["errors"]="$lerror";
}

if($c!="0"){ //passes validation
$return["success"]="yes";
}
if(isset($_GET['callback'])){  //jsonp edit
$return["json"] = json_encode($return);
echo $_GET['callback']."(".json_encode($return).")"; //jsonp edit
}

}

也在远程服务器上转换为JSONP之后-获取错误-

Also after converting to JSONP on remote server - get error -

"jQuery111006159528985153884_1411663761720 was not called"

推荐答案

使用JSON数据类型处理jQuery AJAX时,服务器端脚本产生的任何通知,警告或错误都会引起问题.原因是输出的PHP错误破坏了jQuery期望的JSON编码.

When dealing with jQuery AJAX using a data type of JSON, any notice, warning or error produced by the server side script will cause issues. The reason being is the outputted PHP errors break the JSON encoding that jQuery is expecting.

我怀疑这两种环境不完全相同,可能是不同的PHP版本,缺少PHP扩展名或php.ini文件中的设置不同.

I suspect the two environments are not identical, perhaps a different PHP version, missing PHP extension or different settings in the php.ini file.

最好的办法是使用提供的jQuery AJAX错误回调来控制台记录所有错误,从而使您能够从根本上解决服务器端脚本引发的任何问题.

The best thing to do is to use the provided jQuery AJAX error callback to console log any errors allowing you to essentially troubleshoot any issues being thrown by the server side script.

!!!编辑3 !!!

!!! EDIT 3 !!!

客户代码

$.ajax({
    type: "POST",
    dataType: "json",
    url: "http://myurl.com/jsonpost.php", 
    data: data,
    success: function(response) {
        console.log(response);
    },
    error: function(xhr, status, error) {
       console.log(xhr);
       console.log(status);
       console.log(error);
    }
});

服务器端代码

header("Access-Control-Allow-Origin: *");
header('Content-Type: application/json');

echo json_encode(array('success' => 'yes'));

使用此基本代码版本,我可以成功发出跨域请求,并控制台记录响应.如果您实现了此代码,但仍然无法正常工作,则在服务器和/或网络级别还有其他问题.

Using this bare bones version of your code I can successfully make a cross domain request and console log the response. If you implement this code and it still does not work there is something else at play at the server and/or network level.

这篇关于获取json ajax php表单以远程工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆