当前位置: 首页 > 面试题库 >

对PHP WebService的JQuery JSON调用始终运行“错误”回调

曾英睿
2023-03-14
问题内容

我现在很头疼,因为我整天都遇到这个问题,但仍然无法解决。我在Google和StackOverflow上看了几个小时,尝试了许多方法(包括从JSON更改为JSONP,检查PHP上的标头,本地主机测试),询问了朋友等等,但我仍然陷入困境。也许只是一个细节,我不知道。

我正在开发一个Android移动应用程序,为此,我在托管服务器(例如example.com)上有一个PHP Web服务,自从我使用PHP WS
JSON客户端进行了测试以来,它就可以正常运行。问题是我现在正在使用jQuery,JSON和Ajax从计算机上的JS文件中调用此WS,并且从Google
Chrome的调试器控制台收到以下响应:

  • readyState:4
  • statusText:“确定”
  • responseText:(我需要什么,没有错误)

但是在服务器的响应中, 我总是收到Error回调,而从未收到Success 。我读这是因为服务器无法正确解析JSON,但我真的不知道。

我把代码留给你。

从CLIENT.JS:

$.ajax({
    type: "POST",
    crossDomain: true,
    contentType: "application/json utf-8",
    dataType: "json",
    url: "http://www.example.com/ws/webservice.php/" + methodName,
    data: JSON.stringify(window.parameterArray),

    success: function (response)
        {
            alert('Success!');
            window.resultVar = "Success! " + response;
            console.log(response);
        },
    error: function (response)
        {
            alert('Error');
            window.resultVar = "Error: " + response;
            console.log(response);
        }
});

从SERVER.PHP:

<?php
header('Access-Control-Allow-Origin: *');  //I have also tried the * wildcard and get the same response
header("Access-Control-Allow-Credentials: true");
header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');
header('Access-Control-Max-Age: 1000');
header('Access-Control-Allow-Headers: Content-Type, Content-Range, Content-Disposition, Content-Description');
header('Content-type: application/json; charset=utf-8');

require_once "mobilefuncts.php";

$methodName = str_replace($_SERVER["SCRIPT_NAME"]."/", "", $_SERVER["REQUEST_URI"]);

if (isset($methodName))
{
   $param = (array)json_decode($HTTP_RAW_POST_DATA);

   $access = new MobileAccess();  //From mobilefuncts.php
   $result = call_user_func_array(array($access,$methodName), $param);   //Calls the method

   echo json_encode($result);
}
?>

有谁知道该怎么办?就像我之前说的,问题可能只是一个细节。我真的不知道,我对这种事情有点陌生。

正手感谢!

更新:

我刚刚意识到Chrome控制台告诉我这一点:

GET http://localhost:81/.../cordova_plugins.json 404 (Not Found)

可能是问题的原因吗?

更新2:

看这里,我有一个线索。我向错误函数添加了更多参数,并得到了以下结果:

(错误的变化是从 function(response)function(jqXHR,textStatus,errorThrown)

jqXHR.responseText: [an array with the info I'm asking]
errorThrown: "SyntaxError: Unexpected token"

问题答案:

因为您正在进行跨域调用,所以需要使用JSONP。PHP服务器必须形成如下所示的响应:callback(jsonSyntax);



 类似资料:
  • 我想Node.js读取form.html当域名localhost:3000/form,但由于某种原因,它总是给我一个错误500页。 fs.readFile的回调函数中的content参数未定义,即使文件的路径正确。 添加了错误消息: {[Error:enoint,打开'C:\form.html']errno:34,代码:'enoint',路径:'C:\form.html'} 我必须指定文件的完整路

  • 我一直在使用Processing 3.0,我试图在Arduino输出某些值时打印一个简单的时间戳,但它不起作用。我尝试使用SimpleDataFormat,但它总是返回,而不是实际时间。以下是MVCE: 输出示例: 我怀疑问题出在,因为,如果我将这些值插入在线epoch转换器,我会得到正确的时间。上述代码中的问题是什么?

  • 问题内容: https://docs.oracle.com/javase/6/docs/api/java/lang/System.html#currentTimeMillis()说: 返回当前时间(以毫秒为单位)。请注意,虽然返回值的时间单位是毫秒,但该值的粒度取决于基础操作系统,并且可能更大。例如,许多操作系统以几十毫秒为单位测量时间。 我不确定我是否可以保证此代码将始终打印出不断增加(或相同)

  • 我在研究JNI的回电 null

  • 下面是我的通道使用者的方法。为了保护无辜者,一些名字被改了。 因此,包装了许多,每个都有一个关联的Classify请求和一个关联的Validate请求。我们希望1)转换为,2)将转换为一系列,3)为每个运行两个下游请求,4)将所有对象聚合为一个整体响应,5)向客户机发送一个响应。 我遇到问题的地方是方法,它似乎从来没有执行过。每次尝试涉及的内容时,似乎总是失败,这次也不例外。 、相当简单,似乎运行

  • 我想一次更新文档的所有选项卡。文档的信封是从一个模板创建的,该模板已经定义了收件人和选项卡,我使用以下负载调用这个endpoint来更新选项卡: