JQuery Ajax 到 JSONRPC 代理

Posted

技术标签:

【中文标题】JQuery Ajax 到 JSONRPC 代理【英文标题】:JQuery Ajax to JSONRPC Proxy 【发布时间】:2013-05-16 00:23:23 【问题描述】:

我已经尝试了 2 天来解决这个问题。我已经尝试了所有的 JSONRPC 库,但没有一个能奏效,所以我求助于自己。

我对代理进行了简单的 AJAX 调用 - 用 php 编写 - 并 POST 请求 JSON:

$.ajax(
  url: "includes/buoybay_proxy.php",
  dataType: "json",
  data: "method": "Test", "params": ["113f8ba8*****************9b5f27e0a0bb"], "id": 1,
  timeout: 5000,
  type: 'POST',
  success: function(data, status, XHR)
      console.log("!!: " + JSON.stringify(data));
  ,
  error: function(jqXHR, textStatus, errorThrown) 
    console.log("??: ", textStatus, errorThrown);
  
);

代理 - 用 PHP 编写 - 工作方式如下:

$con = json_encode($_POST);
$cparams = array(
    'http' => array(
        'content' => $con,
        'method' => 'POST',
        'ignore_errors' => true,
        'header' => 'POST /studs/**************/server.php HTTP/1.0\r\n
                    User-Agent: "User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/28.0.1468.0 Safari/537.36\r\n"
                    Host: my.wamp.server:80\r\n
                    Accept-Charset: UTF-8,ISO-8859-1,US-ASCII\r\n
                    Content-Type: application/json\r\n
                    Content-Length: ' . strlen($con) . '\r\n'
    )
);
//ChromePhp::log($cparams);
$context = stream_context_create($cparams);
$fp = fopen('http://mw.buoybay.org:80/studs/**************/server.php', 'r', false, $context);
//ChromePhp::log(stream_get_contents(($fp)));
echo json_encode(stream_get_contents(($fp)));

这会导致来自服务器的以下错误消息:

"id": null, "error":  "faultCode": 15, "faultString": "Invalid request payload Invalid data (empty string?)" , "result": null     

我只是没有想法;任何人都可以解决这个问题或至少为我指明正确的方向吗?

【问题讨论】:

【参考方案1】:

这就是最终工作的结果(PHP 不是我写的); AJAX 很好,只是我应该使用 GET。

AJAX 代理:

<?php
require_once('jsonRPCClient.php');
include('ChromePhp.php');
$url='http://mw.buoybay.org/studs/studs_cdrh/jsonrpc_cdrh/server.php';
$constellation="CBIBS";
$apikey="113f8ba8f286ad********************f27e0a0bb";
$client =new jsonRPCClient($url,true);

$method=$_GET['method'];//"RetrieveCurrentReadings";
$getParams =  $_GET['params'];
$params=explode(',', $getParams); //array('CBIBS','AN','113f8ba8f28******************279b5f27e0a0bb');
$result = $client->__call($method, $params);

// return the results
echo json_encode($result);
?>

【讨论】:

以上是关于JQuery Ajax 到 JSONRPC 代理的主要内容,如果未能解决你的问题,请参考以下文章

jsonrpc eth_getBalance 失败

Trac JSON RPC 问题 - 将 jQuery AJAX 与 PHP 代理一起使用

jquery ajax json rpc如何在服务器上检索数据

PHP 使用php的Jquery AJAX跨域代理

未捕获的类型错误:无法调用 jquery jsonrpc 客户端中未定义的方法“设置”

ajax学习笔记3-jQuery实现ajax(大拇指向上)