javascript - JQuery JSON 调用 PHP WebService 总是运行 "Error"回调

标签 javascript php jquery json web-services

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

我正在开发一个 Android 移动应用程序,为此,我在主机(比方说 example.com)上有一个 PHP 网络服务,自从我使用 PHP WS JSON 客户端进行测试后,它工作正常。问题是我现在使用 jQuery、JSON 和 Ajax 从我计算机上的 JS 文件调用这个 WS,我从 Google Chrome 的调试器控制台得到以下响应:

  • 就绪状态:4
  • 状态文本:“确定”
  • responseText:(我需要的,没有错误)

但是在服务器的响应中,我总是收到错误回调,从未收到成功。我读到这是因为服务器无法正确解析 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);

关于javascript - JQuery JSON 调用 PHP WebService 总是运行 "Error"回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20685949/

相关文章:

java - 是否可以在 javascript 函数中使用 java 数组?

php - 在phpexcel中合并后按行和列设置单元格值的问题

javascript - FlexSlider 轮播在第一张幻灯片中滑动所有图像 - WordPress

jquery - 如何创建计票进度条

jquery - 将 jQuery 插件更新到 1.6

javascript - JavaScript OOP 的问题

javascript - 在 PDF 中播放声音

javascript - 如果已经发布,如何限制用户不再在同一页面上发布

php - 使用 PHP IMAP 类时损坏的 .docx 文件

jquery - 有没有办法让div在通过jquerydraggable[或等等]拖动时不互相重叠?