Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 无法序列化Alamofire JSON_Php_Ios_Json_Swift_Alamofire - Fatal编程技术网

Php 无法序列化Alamofire JSON

Php 无法序列化Alamofire JSON,php,ios,json,swift,alamofire,Php,Ios,Json,Swift,Alamofire,我试图在我的swift应用程序中使用Alamofire发出PHP Post请求,该应用程序必须使用OVH api发送短信,但我遇到了一个问题: FAILURE:Error Domain=com.alamofire.Error code=-6006“JSON无法序列化。输入数据为零或零长度。UserInfo={NSLocalizedFailureReason=JSON无法序列化。输入数据为零或零长度。} 我没有找到如何从PHP脚本中看到回声来解决它。我认为这不是Alamofire的问题,因为我提出

我试图在我的swift应用程序中使用Alamofire发出PHP Post请求,该应用程序必须使用OVH api发送短信,但我遇到了一个问题:

FAILURE:Error Domain=com.alamofire.Error code=-6006“JSON无法序列化。输入数据为零或零长度。UserInfo={NSLocalizedFailureReason=JSON无法序列化。输入数据为零或零长度。}

我没有找到如何从PHP脚本中看到回声来解决它。我认为这不是Alamofire的问题,因为我提出了另一个发送电子邮件的请求,而且效果很好。以下是我的请求,其中有错误:

func sendSmsAutoRequest(completionHandler: (responseObject: NSDictionary?, error: NSError?) -> ()) {
    let prefs = NSUserDefaults.standardUserDefaults()
    let username = prefs.stringForKey(StorageManager.USER_NAME)!
    let messageText = prefs.stringForKey(StorageManager.MESSAGE_TEXT)!

    let parameters = ["contactsSms": contactsSms, "username": username, "messageText": messageText]
    request(.POST, "http://XXX/dontworry/sendAutoSms.php", parameters: (parameters as! [String : AnyObject])).responseJSON { response in
        print(response)
    }

}
这是我的剧本:

<?php

require __DIR__ . '/vendor/autoload.php';
use \Ovh\Api;

$applicationKey = "XXX";
$applicationSecret = "XXX";
$consumer_key = "XXX";

$endpoint = "ovh-eu";

$contactsSms = $_POST['contactsSms'];
$userName = $_POST['username'];
$messageText = $_POST['messageText'];

$conn = new Api($applicationKey,
                $applicationSecret,
                $endpoint,
                $consumer_key);

$smsServices = $conn->get('/sms/');

$content = (object) array(
                            "charset"=> "UTF-8",
                            "class"=> "phoneDisplay",
                            "coding"=> "7bit",
                            "message"=> $messageText,
                            "noStopClause"=> true,
                            "priority"=> "high",
                            "receivers"=> $contactsSms,
                            "senderForResponse"=> true,
                            "validityPeriod"=> 2880
                            );

$resultPostJob = $conn->post('/sms/'. $smsServices[0] . '/jobs/', $content);

$smsJobs = $conn->get('/sms/'. $smsServices[0] . '/jobs/');

echo '{"contacts": $contactsSms,"username": $username, "messageText": $messageText, "result": $resultPostJob, "sms": $smsJobs}'; ?>


编辑:这似乎是工作,我没有错误了!但是SMS不会被发送…

序列化是将对象转换为JSON字符串的过程。因此,问题不在于如何处理您的响应,而在于如何处理您的请求


记录
参数
字典的内容,并检查零值。

第一次阅读时,PHP脚本很可能打印出无效的JSON。下面的语句将打印包含无引号字符串的JSON(假设一个或多个参数,如
$\u POST['MessageText']
包含字符串值):

输出示例(为便于阅读,打印精美):


这是alamoFire中的一个bug,在3.1.1版中已修复,请参阅,只有在REST-like服务返回响应204(无响应)时,修复版本才有效,理论上这是正确的方法。

尝试添加
参数![字符串:AnyObject],编码:.JSON)
。。可能的话,可以尝试使用
参数![String:String],编码:.JSON)
can@senty-否,响应是JSON。但是如果您查看PHP代码,web服务期望的是
application/x-www-form-urlencoded
请求。将请求设置为JSON会使情况变得更糟。Karz,helmbert在这里正确地诊断了一个问题。构建关联数组,然后对其进行编码。还要注意,PHP在输入中引用了
$userName
,在输出中引用了
$userName
(但从未真正使用过它?)。但是,如果你的短信仍然没有发出,你需要诊断发生了什么。您在返回的JSON中包含了
$contactsSms
$username
$messageText
,这看起来怎么样?什么是
$smsJobs
?编辑您的问题,并向我们展示此
响应.result.value
的外观。
echo '{"contacts": $contactsSms,"username": $username, "messageText": $messageText, "result": $resultPostJob, "sms": $smsJobs}';
{
  "contacts": foobar,  # <-- This is invalid! It's a string and needs to be quoted!
  "username": johndoe,
  "messageText": Hello World,  # <-- This is even more invalid!
  ...
}
echo json_encode([
    "contacts" => $contactsSms,
    "username" => $username,
    "messageText" => $messageText,
    // etc.
]);